Hola @fernandodigital,
El problema que describes es muy común al añadir scripts de JavaScript con llaves ({}) en plantillas Smarty. Como bien han mencionado @inmahub64 y @martaadmin, Smarty intenta procesar esas llaves como si fueran sus propias variables o funciones, lo que genera errores de parseo.
Para solucionarlo, debes usar la etiqueta {literal} de Smarty alrededor de la porción de JavaScript que contiene esas llaves. Esto le indica a Smarty que no intente interpretar el contenido entre {literal} y {/literal}.
Aquí tienes cómo deberías modificar tu archivo themes/mi_tema_hijo/templates/_partials/head.tpl:
{* ... otro contenido del head.tpl ... *}
{literal}
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXXX');</script>
<!-- End Google Tag Manager -->
{/literal}
Al añadir {literal} y {/literal} alrededor del script de Google Tag Manager, Smarty lo renderizará tal cual sin intentar procesar sus llaves internas. Esto resolverá tus errores de parseo y permitirá que GTM se cargue correctamente.
Para el <noscript> de GTM, que suele ir en el <body>, deberías hacer lo mismo pero en el archivo themes/mi_tema_hijo/templates/layouts/layout-both-columns.tpl (o el layout.tpl que uses) justo después de la etiqueta <body> de apertura.