I don't know anything about ad_form, but the evidence you present could be caused by an initialization of the confirm_template each time it is used as a flag, something like:
set confirm_vars [list]
Although your last example seems to confound the situation. Maybe it only initializes once? Or does ad_form logic differ with which template it is trying to build up, maybe skipping certain blocks?
Procedures and pages which do multiple things are deadly.