For some reason, the password-reset template was too long to do proper substitution on the last line. Removing some of the intermediate content fixed the problem, but without appropriate content. I had been unhappy with the @@file approach anyway, so I went back to language-specific templates for each type of message.
Move the language-specific files out of the default build area. Add a build property that will cause the selected language(s) to be copied into the build area.