It's possible that the carrier's billing system has problems. It could also be the fact that if a connection fails and is retried in the lower levels of the protocol the carrier sees this as 2 data exchanges, but iOS doesn't know about the retry so it counts it as only one. And some carriers round up every data exchange to 1 kb. So if you send 100 bytes you get charged for 1000 bytes.
The best you can do is call the carrier and complain. Take screen shots of the usage screen to back up your complaint.