Я так понимаю вы использовали шорткод в виде переменной, когда в модуле вы каком-то экстендере создали переменную в которой лежит HTML код, и выводите её. Этот метод плох тем, что такая переменная создается еще в момент сбора системы (до вызова метода контроллера текущего роута), а капча создается прямо из tpl файла, вот и получается что до момента её валидации она уже создаётся новая.
Более предпочтительный метод работы с шорткодами, это объявить smarty плагин, и в клиентском коде выводить не {$my_modue_block}, а {my_modue_block}
документация по плагинам в модулях