Unfortunately, all the suggested fixes seem to be failing for me, including an upgrade to a newer zsh. As a user of zsh for the past ten years or so, I'm certainly not going to change shells, which made me think of this approach. It also gives me the joy of abusing both csh and dtterm at the same time. The principle is to use csh to bootstrap zsh, utilizing an obscure terminal type to signal csh to do so. At the command prompt (if you can get one -- I was having this problem only occasionally), execute:
echo 'if ($TERM == dtterm) then' >> ~/.cshrc
echo ' set term=xterm-color' >> ~/.cshrc
echo ' exec zsh' >> ~/.cshrc
echo 'endif' >> ~/.cshrc
Then in Terminal Preferences, set "Execute the command (specify complete path)" to /bin/csh -l and "Declare terminal type ($TERM) as" to dtterm.
Of course, if you're unfortunate enough to have to still use dtterm emulation at any time, you'll have to substitute one of the other predefined terminal types.

