Trying to summarize the comments above, it seems that trying to format messages in the current user's language (e.g. using wfMessage() or RequestContext::getMain()->msg(), without setting the language) in no-session entry points (e.g. load.php) should fail consistently for every format (->parse(), ->plain(), and others).
I suggest we make it a non-fatal error first (that is: log it using LoggerInterface::error(), instead of throwing) and fall back to content language or other defaults. Once we no longer have any of these errors in production, we change it it into a thrown exception.