Well Yahoo decided to screw me over more than usual. Technically "push" is still working as my iPhone and iPad are still checking for mail when new mail arrives, but now at least 90% of the time the new mail simply won't download. It will say "downloading 1 of x" and the progress bar will appear and then immediately disappear with no mail downloaded. Occasionally it will work, but most of the time it won't.
Deletions work (either on the web site or in the app) as does flagging or marking existing messages unread/read, but new mail won't download.
The problem appears to be with some of Yahoo's IMAP servers. When the iOS Mail app goes to grab mail, it connects to apple.imap.mail.yahoo.com which randomly returns one of the following ip addresses: 66.218.74.63, 98.139.244.126, 98.138.24.48, 98.139.172.225, 98.138.215.4, 98.138.24.49, 98.138.31.75 or 98.139.212.64. From my testing the following normally work: 98.139.212.64 and 98.139.172.225. The following never work: 98.138.24.48 and 98.138.215.4. The following sometimes work and sometimes don't: 66.218.74.63 and 98.139.244.126. I didn't get a chance to test the others.
The problem is that once the download fails, checking for mail again won't try to download again unless there's a change to the folder (new message, deleted message, flag/unread status change). So once it fails, it won't try again until there's a mailbox change at which point it can simply fail again. I can force a change by flagging a message and checking again, but it can still fail to download after checking.
Also the iPhone and iPad tend to stick with the same server for a period of time so once it picks a bad server, it gets stuck on it. As such mail simply won't download at least 90% of the time. Worse still, I have no idea there's any missing mail since going into the Mail app and checking manually shows no new mail. The only way I can tell is to go to http://mail.yahoo.com in Safari. That's really, really annoying.
I've seen this problem in the past. Sometimes it fixes itself in a few hours. Other times it takes days or weeks. Since the problem started about 3 hours ago, it looks like it might be the later before it's fixed.