SERVER-40806, the recovery shard and coordinator shard can be different, it's possible for recovering the transaction's outcome to find the a participant in prepare.
1) client sends commit to original mongos
2) mongos hands off commit to coordinator
3) coordinator sends prepares
4) client sends "recover" commit to different mongos
5) different mongos tries to recover from the recovery shard, which is not necessarily the coordinator shard, and so doesn't necessarily have a coordinator in its in-memory catalog. so, the recovery shard node tries to recover from its local participant and finds the local participant in prepare
Recovering a transaction's outcome should be changed to block until the participant has finished committing or aborting the transaction.