Hey Rob!
A couple of questions and a comment.
First question: what version of MongoDB are you using?
Second question: It sounds like you're running a 'mapReduce' command against the 'records' collection and using the 'out' parameter to direct the output to the 'patient_cache' collection -- please confirm that this is what you're doing
Third question; would you please post the output of sh.status() from this cluster (you can redact the host names if you like).
The comment is that you're making an incorrect assumption if you think that sharding two collections by the same shard key will ensure that the documents live on the same shard. MongoDB assigns chunk ranges to shards quasi-randomly. Even if you shard these two collections with the same shard key, chunk ranges are likely to be different and the individual chunks will almost certainly be assigned to different shards. (The only exception would be if you're using tagged shards.)
It's not clear what you're trying to accomplish here. If you are trying to later join between the 'records' and 'patient_cache' collections, you'll need to do an application-level join and route the query through 'mongos', so there is absolutely no need to have the documents from the two collections be co-located on a single shard.
-William