My cluster entered a state where it would reject all writes that wound up getting routed to a slave via DNS (which was "fun") and they return 400 Bad Request, which is then interpreted as WrongExpectedEventNumber - probably because the documentation is incomplete.
I described it here: https://groups.google.com/forum/#!topic/event-store/LE473sLEk_c
There is also a case pretty often where I get a 307 in response to a write while my cluster is in an error state. No clue why.
So I think we need to do some more parsing of the responses, and can't rely on status codes. Sadly.