It turns out that I had an empty "en-US" folder inside the release output folder, left over from a localization experiment. Apparently the WPF/.NET engine tried to load the control template from the "en-US" folder, and when it failed, did not revert back to the template defined in the assembly.
The solution was simple - delete the folder.