Note: It may well be expected behavior. However, as recent experience has shown, it is counter-intuitive, so if it works so by design, it should be explicitly documented, probably here.
The intuitive expectation here is that when the SELECT is executed, the value of @warning_count is still 1, and SELECT will return true without even executing the right part of OR. However, it doesn't happen, at the moment of execution the value of @@warning_count is already 0. Apparently, it gets reset before SELECT starts.
Also reproducible on active versions of MySQL, but equally unclear from MySQL documentation whether it's expected behavior.