Проверяя ваше регулярное выражение, я вижу, что ваш обратный слеш применяется к квадратной скобке. Чтобы использовать обратную косую черту в квадратных скобках внутри строки в кавычках, вам нужно дважды ее экранировать:
'/<!--if\(([^\\\]*)\)-->([^<]*)<!--endif-->/e'
Но я не знаю, почему вы изобретаете новую логику шаблонов, когда существуют такие решения, как Smarty и сам PHP.
Вот тестовый код в ответ на комментарии ниже.
testinput.tpl
<!--if({VERSION} == 2)-->
Hello World
<!--endif-->
match.php
<?php
$template = file_get_contents('testinput.tpl');
print preg_match('/<!--if\(([^\\\]*)\)-->/e', $template) . "\n";
print preg_match('/<!--endif-->/e', $template) . "\n";
print preg_match('/<!--if\(([^\\\]*)\)-->([^<]*)<!--endif-->/e', $template) . "\n";
тестовый прогон :
$ php match.php
1
1
1