Mine actually works very well MOST of the time.
I'm starting to believe that it is either a timeout (session) issue, or the background app crashes somewhere along the way. occasionally i wake up in the morning and I have zero new emails, once I fetch all the new ones come in. now I notice that there was a 2+ hour between emails over night so that might have something to do with it. After that, push no longer works until I reset my phone. Once I reset, push works beautifully again. to answer your questions. Again, I am old Mobile me migrator, 3GS to 4S, using same mobile me address, on AT&T:
it is not an iCloud issue as emails are pushed elsewhere (PC, MAC, ect).
Correct.
it seems to be an iOS 5 isolated issue (but only with email) contacts, calendar etc are all OK
Correct.
iOS 5 Mail App must be running in the background for push to happen.
if Mail App is closed, push can still happen (very very rarely - hit and miss)
Somewhat Correct; When I kill my app, i continue to receive push notificationsfor a few minutes, apparently while the process is still shutting down.once the app is closed for a while without any emails coming through (maybe 5-10 minutes), then push starts to fail (again, maybe a timeout issue).
mail retrieve settings are definitely and certainly for Push (worked for MobileMe in iOS 4)
Correct. Everything set up correctly. and worked flawlessly on iOS4.
push email was working fine when I switched to iOS5 - I was using MobileMe and hadn't migrated to iCloud
Difficult for me to tell, I migrated when I purchased the 4S (received it on launch day).
most people experiencing the problem had an old MobileMe account that they migrated to iCloud.
Correct. I migrated from mobile me, using my same account.
Apparently the message listeners are being killed either on app close, or timing out when they should be running at all times. Might have been done to conserve battery life, not sure. But I assume they should be running at all times as a background service, with or without the email app running. Will probably get fixed on next releast (5.0.1).