There are devious code paths that can still depend on the user preference language no matter how much we try to clean things up, for example Title::getMainPage() when $wgForceUIMsgAsContentMsg contains 'mainpage'.
The only sensible fix is to set the main RequestContext language (and $wgLang) to the ResourceLoader language in load.php.
(T127920: Message class should use appropiate default language based on request context was supposed to be about doing this, but it wound up instead shaving a yak that didn't even need to be shaved.)