The method getOperationToApply() states that it returns the document corresponding with the write operation for a given OplogEntry object. It asserts furthermore that for updates, this will be the o2 field. For updates, the o2 field will contain the document key – that is, the id (and the shard key if in a sharded cluster).
For sharding's use of this function, we always need a document that has at least the id and the shard key. The function should be renamed (or more functions should be created) accurately reflect its usages in both applyOps and sharding.
Bug was introduced in version 3.7.2.