is this authenticated key exchange protocol sound? too complicated? obviously flawed?
The standard advice in this situation would: use a well-vetted mechanism, like TLS (or DTLS, or some other similar scheme).  If you're not doing that, you'd better have a good reason, as designing your own key-exchange protocol is non-trivial and unnecessarily risky.