I didn't read through all these posts, so if I'm saying something that was already stated I apologize for duplicating...
My 4S was losing 1% of battery every 3 or 4 minutes and it was REALLY warm. I downloaded System Activity Monitor (.99¢ in the App Store) and noticed that the CPU was pegging out or consistantly at 50%+ and the culprit was usually contacts or calendar processes. Turning off location services, brightness, Bluetooth, etc had no effect so I assumed that it was a software issue. (duh)
My company upgraded their Exchange server to 2010 this week, so I had deleted the IMAP account and created a native Exchange account, syncing mail, contacts and calendars. I stopped syncing everything except mail.
Next I went to my iCloud settings and turned off ALL features and deleted from my iPhone whenever I could and then rebooted the phone. After the restart I turned services on one-by-one and watched System Activity Monitor for each process and after starting each process the CPU would hit 40-50% while the service started and then go back to idle (2-4%). After repeating this process for each service in iCloud it was the same for each.
But now everything was hunky dory...CPU was at a normal idle level and the battery was holding. After a half hour of stable operation I decided to turn on contact syncing from Exchange and the instant I did that the CPU started a constant fluxuation between 15% and 60%. When I tried to turn it off it wouldn't solve the issue. The "ABDatabaseDoctor" process was still hammering the CPU.
After deleting the Exchange account, rebooting, and syncing only mail the issue seems to be fixed. I don't know if it's specific to Exchange, but syncing my Google Calendar has the same effect. It seems that syncing data with sources outside of iCloud is causing the issue for me. Without Exchange and Google syncing I'm humming along at 2% CPU utilization while the phone is idle.
Anyone else noticing this?