модификатор e? вы серьезно? Используйте preg_replace_callback. Хотя по хорошему вам вообще регулярки для такой задачи не нужны.
$template = file_get_contents(self::PATH_TEMPLATE . $path);
$vars = array_combine(array_map(function ($key) {
return '{$' . $key . '}';
}, array_keys($data)), $data);
$content = strtr($template, $vars);
хотя в случае если значение не найдено оно не будет заменять на пустую строку, но я считаю что это вообще плохая практика. Можно провести часы в дебаге и только потом обнаружить опечатку в названии переменной в шаблоне.
А вообще может стоит выкинуть эту шляпу и воспользоваться twig?
p.s. ваша регулярка к слову рабочая.