MongoDB servers only promise that getLastError returns meaningful information about errors in wire-protocol writes or write commands. For finds, getmores and all other commands, the error component of getLastError has unspecified meaning. By setting the lastError information higher in the call stack, when we know they won't be swallowed, we can make lastError more sensible, and also break the triangle dependency between the lasterror, network and foundation libraries.
This changes the behavior from prior versions of MongoDB, in which servers occasionally set the last error information in non-write commands and failed find operations. However, the servers were not consistent about the conditions in which they would set the information, as drivers were not expected to consult it.