Found this in another thread...
Make sure you turn off 3G and Data at night, and close all apps that could potentially use data. For some reason, when the iPhone 4 goes to sleep, it reverts to 3G. If you turn off 3G then it appears to stay in WiFi
(To close apps, double click the home button, which opens a task bar. Hold the first app until a red circle with a white bar appears and press that on all the apps until the task bar is empty - apologies if you know how to do this, but many don't)
It's worth doing a reset on your phone, as it worked for me. The iPhone team will tell you this anyway.
For some strange reason, the Data use is rounded up at Midnight by O2 and subtracted from your allowance. There are a couple of Apps like Dataman which will monitor your usage on a daily basis (if you get the paid for version of the app) and Onavo, which will cut your usage as you use 3G. It's worth getting one or both of them (Onavo is a free app, and has saved me 107Mb since I installed it)
Remember you can check your recent usage by going to the My Bill tab on the My O2 Mobile page (it's the 5th one down in the menu on the left). It's a good indication of your daily use, and if you have it to hand when you ring O2, it is hard for them to argue that you are at fault. The numpties will try to kill your argument, as they think they know it all and are patronising at best.
I had this problem in September, and after a reset and following the above advice, I've kept my Data Usage to under 100Mb per month. The last few weeks I've been laid up after breaking my leg, so the 3G was off more than on for the last 10 weeks, as I didn't leave the house much. Therefore I've not used much data. Of this months 500Mb I've used 21Mb since my last bill.
When I spoke to the iPhone team in September one of them admitted it was their fault, so it's worth speaking to them, rather than suffer the initial customer service person.
Hope this helps!