DifferenceEngine will be split into two parts for MCR: the page-level part that deals with e.g. generating the navigational links on top of the diff, and the slot-level part which actually renders the diff for a single Content pair. DifferenceEngine will retain the page-level functionality and the slot-level logic will move to a new SlotDiffRenderer class.
Extensions can customize diff rendering by subclassing DifferenceEngine and making MediaWiki use that subclass by overriding ContentHandler::createDifferenceEngine or implementing the GetDifferenceEngine hook. Since such subclassing might be intended to change page-level rendering, slot-level rendering or both, the new code tries to handle it on both levels: on the page level, things work as before, and on the slot level, ContentHandler::getSlotDiffRenderer (which is responsible for creating SlotDiffRenderers) calls ContentHandler::createDifferenceEngine in certain cases and if a custom DifferenceEngine is used, uses that for rendering the slot diff.
Instead of using one of those mechanisms, Special:MobileDiff creates an InlineDifferenceEngine directly. There isn't any way to intercept that and use it for slot diffs so those are rendered as non-inline diffs and things break. In the longer term, some serious refactoring/rethinking will be needed to fix that (how do we show a mobile diff that has multiple slots and one of them is a content type that has its own diff renderer? we can't use both InlineDifferenceEngine and the content type's custom subclass for that slot). In the short term, just change diff engine creation to happen in a way that's easy to intercept.