An internal source at AT&T discussed the problems fixed by the 2.0.2 update, explaining, in no uncomplicated terms, that the update controlled the UMTS power control in the phone. Each iPhone requires a small amount of power from the transmitter and that power is requested by the phone itself. If too many phones ask for too much power at once, the transmitter starts shutting down, resulting in dropped calls. The iPhone 3G was asking for too much power and, in 2.0.2, has been fixed to stop requesting that power so often.
The result is a net effect: if everyone upgraded, we’d all be OK. But since folks are slow to update, the problem persists. The only way to fix this once and for all would be to push an over the air update to the phones, something I’m not sure Apple can or will do.