TextFormatter::format calls $message->inLanguage( $this->langCode ); to set the language, but inLanguage unconditionally sets $this->interface = false;, meaning all messages formatted via TextFormatter are not considered interface languages. This leads to issues such as {{GENDER:|x|y|z}} (implicit user) not being parsed correctly, like the example reported in T315205.
It should be noted that this is not an issue in code using wfMessage because that doesn't call inLanguage, and also code using RequestContext::msg(), which calls Message::setContext() which in turn does $this->interface = true; after calling inLanguage.
I know pretty much nothing about the specifics of the "interfaceMessage" flag, so I have no idea if this is intentional and what the best way forward would be.