Multi-updates are currently unversioned and part of the update execution code path sets the version of the connection to "ignored":
This is fine if the connections are used exclusively by write commands as the version information always comes together with the command request and will be reset every time. However, versioned opQuery requests are stateful and rely on the fact that the connection it uses has the shard version information in it. If a connection is initialized with a version and a multi-update/remove gets issued on the same connection afterwards, it will make the connection become "unversioned" for that namespace and succeeding queries using that connection will skip version checking for that namespace until a non-multi write command resets the connection version to something that is not "ignored".
The attached test.js demonstrates this behavior.
- is related to
SERVER-20279 OperationShardVersion::get should return a pointer, not a mutable reference