Proposed title: logOp / OperationObserver should always check shardversion
If a shard's notion of its shard version for a collection changes after a single-document operation has established the operation's expected shard version for the collection on that shard, any call to logOp() by that operation should trigger a shard version error and rollback of the operation.
Multi-document operations, such as multi:true updates and justOne: false deletes are inherently unversioned in the current protocol, and so shard version mismatches for those operations should not result in error propagation.
– from original description –
The shard needs to send a version error as a response when the shard version changed right after a non-multi update (the writes that failed to be included in the transfer mod phase of the migration).