OutputPage contains its own copies of most of the metadata maintained by ParserOutput, including lists of categories, index policy, the "no gallery flag", resource loader modules, etc, etc.
Instead of storing this data twice and writing bespoke routines to merge the contents of ParserOutput with OutputPage, maintain this metadata in OutputPage as a special instance of ParserOutput, accessible via OutputPage::getMetadata(). We can then use the standard "merge two ParserOutputs together" routines to combine the metadata from the page with any metadata from parsed content.
See also T300979: Ensure ParserOutput can always be combined asynchronously/out-of-order.