After performing a zoom, the event order is: onZoomStart, onZoom, onViewReset, onMove, onZoomEnd.
After using map.setView(), the event order is: onZoomStart, onViewReset, onMove, onZoomEnd.

So it looks like the only solution is to add a skipViewReset flag in onZoom. Does this seem right?