This works as a module, but think it should go in my .theme file instead
What you missed is, that you can achieve all that output manipulation by just using the admin UI and view modes. It has the benefit of you being able to adjust the output order and available fields without having to touch any code. And gives you more power and flexibility to administer how content is displayed.

By incident, your solution matches a question answered just recently here: How to modify the value of a taxonomy field of a node using hook_node_view()?

Please have a look to my answer there, which describes how to show a field of the the taxonomy terms on the nodes by using the UI. 

You can easily adjust the proceedings by e.g. creating a dedicated display mode for your content nodes instead and adding the required fields there.

Additionally, you like to show the formatted created time, which you can either preprocess within a theme's hook_preprocess_HOOK() (so for example yourtheme_preprocess_node()), but also have already exposed within the template variables as {{ date }} in your node.html.twig template.