Все, разобрался. У тебя этот код где-то в блоке находится? ( {block name=someblock}… {/block} ). У меня было это в блоке, и из-за этого рекурсия бесконечная и была. Здесь появляется логика в плане бесконечной подгрузки шаблона. Блок — это отдельная очень хитрая сущность, которая может расширяться, и в которой могут быть и другие блоки. Вот для того, чтобы быть «в курсе» по всем внутренним блокам, Smarty выполняет обход всех вложений {include file=} без учета всяких условий и т.п. (просто чтобы полностью скомпиллировать блок) (без условий — это в общих чертах). И так как там шаблон вызывает предыдущий шаблон, то и происходит бесконечная рекурсия. То есть память выжирается не на уровне выполнения процессора, а на уровне прекомпилляции шаблона.
Если у тебя менюшка находится в блоке и обязана там быть, то лично я эту проблему обошел за счет сниппета. То есть Смарти-код с процессором менюшки и т.п. вынес в отдельный шаблон, который вызывается сниппетом, а в блоке прописал этот сниппет {snippet name=menu}. В результате при прекомпилляции блока Smarty не выполняет этот сниппет и не зацикливается без дела. Все нормально работает.