So I can't remember which tool I used to compress that but I can narrow it down to 2 possibilities. I either had not yet included zipping as part of my build automation yet, in which case I right clicked the folder and went to Send To -> Compressed File on Windows 10 (Version 1903 OS Build 18362.356). Or I had already automated compression as part of my build process and the command was Powershell's Compress-Archive run with no options (version 5.1.18362.145 Desktop edition). I think the second option is slightly more likely.
It probably won't come as a surprise to you that I read the minimum amount of butler's documentation to get to the point where I figured out how to make the upload happen, so I may have just missed this next thing. I didn't realize that it was possible to push a folder instead of a .zip until you mentioned it in your response, since that's the opposite paradigm of how the manual uploads work. I really like that you do explicitly call this exact thing out in your error message for if someone does try to push a terrible zip file so they can stop! There may be other places you want to make that more obvious as well if that's a common error and not just a thing that I missed.
I deleted my old upload and was able to do a successful push using the folder. Thanks for your help!