Access hook_preprocess_node variables from page controller
So the problem turned out to be an incorrect #theme template name in my returned render array. The node type I was adding content to was called product_group, but in my controller, I returned this:
 return [
   '#theme' =&gt; 'node__product_resource__full',
   '#product_group' =&gt; $content,
   '#node' =&gt; $pg_node,
   '#view_mode' =&gt; 'full',
 ];

product_resource is a valid content type in the site. Once I changed it to
'#theme' =&gt; 'node__product_group__full',

It worked fine.