The markerSkipCallback mechanism in core skips extension tags, since they are represented as strip marker. So, for example:
{{#uc:some <nowiki>thing</nowiki>}}renders as "SOME thing", without uppercasing inside the extension tag.
In order to make this work properly, our DataAccess::preprocess() method should probably return a new ExtensionTagPFragment type, which we can recognize and either skip or convert back to wikitext.
This will also allow the KeyValuePairPFragment::toRawText() method to work better, since it will be able to recognize a <nowiki> in the argument.
Similarly, any parsoid-implemented parser functions are left unexpanded by the core preprocessor. Perhaps core needs to return some sort of ParserFunctionPFragment type as well so that these can then be expanded by Parsoid somehow.