When thinking about what's in physical memory don't think in terms of the module (dll) as a whole, think in terms of its pages.
Only those pages that have been read will have been loaded from disk into memory.
Only those pages that have been written to (e.g. data page or code page with fix-ups) will have been copied in memory.
At any given point in time a non-copied page could be freed, and loaded again later from the disk when required.
At any given point in time a copied page could be freed from memory and put in the pagefile.
Even after your last app, that uses a given dll, exits pages of the dll may still be using physical memory in the page cache until they expire.
So, the simple answer, the one i originally gave, is usefull for thinking about what happens in general, because thinking about what happens in detail isn't much use.
The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.
- John Carmack