So Windows does not just go and grab the memory from SQL Server and give it to someone else - that could have been drab effects.
But SQL Server listens to the OS, and if SQL Server finds that there is memory pressure in the machine, it will yield, mainly by giving up data in its caches. And this is true, no matter you have "lock pages in memory" set.
You can easily try this by first getting a lot of data into the buffer cache so that SQL Server maxes out is 3GB of RAM. Then you can start something else that needs memory, and if you monitor sys.dm_os_process_memory, you will find that SQL Server memory will decrease.
If you have not seen this, it could be that you have not been able to find a process that grabs that much memory. Tip: another SQL Server instance could be a thing to try.