One of the causes is that the log positions are written in the 2PC commit COMMIT phase while that should happen in the PREPARE instead.
A second potential issue (not confirmed yet) is that slave-relay.info is overwritten too early, after the InnoDB crash recovery has run, but before the binlog crash recovery. It's possible however that this is purely theoretical issue right now.
One of the causes is that the log positions are written in the 2PC commit COMMIT phase while that should happen in the PREPARE instead.
A second potential issue (not confirmed yet) is that slave-relay.info is overwritten too early, after the InnoDB crash recovery has run, but before the binlog crash recovery. It's possible however that this is purely theoretical issue right now.