Replacing an existing zip is the default option, and should “just work”.
Somewhere in the settings you can “reject builds with the same version number” (or something similar), did you check that? It could possibly explain it.
It’s in “Edit Game” -> “Distribute” -> “Build Settings”. The one I was referring to is:
[ ] Enforce unique versions per channel
Pushing a build will fail if the version already exists in a channel
But I also saw the other tickbox:
[ ] Enforce semantic versioning
Versions that aren’t of the form a.b.c-suffix (where -suffix is optional) will be rejected.
These were the only reason I could think of why a build would be rejected. If both are un-ticked, then maybe something else is happening.