The donor does not tell the recipient to abort the migration when it returns early in some cases. Some of them are fine as they are a result of the recipient shard aborting. To make things worse, the _migrateClone and _transferMods doesn't include any parameter indicating what they are requesting, so it seems possible for these command to be pulling data intended for a different migration session. For example, if the donor shard aborts without informing the recipient and then starts donating chunk to another shard.
The donor restarting would most likely not exhibit this issue as the recipient shard is using the same connection to talk to the donor for the entire migration.
One example of the donor shard aborting is through the killOp interruption points.