I believe you need:
If ( length(Zip)< 5 and Country="United States" ; 0&Zip ; Zip )
Excellent. It makes sense now. (This also explains why I when I changed the position of the 0&Zip that it was partially correct but in the other direction.) I never realized that one of my conditions was set up incorrectly.
Many, many thanks!