I found, through lots of painful trial and error, that if your manifest file has CRLF line endings, it fails when pushing to azure.
It throws on the server side, and returns a 400 with no body.
Replacing CRLF with LF works fine.
(I suspect this is not the right repo for this issue, but not sure where to log. Maybe https://github.com/Azure/azure-marketplace is the right spot?)