From another forum... but it seems to explain a little of what is going on... hopefully Apple can fix this issue.
Back in the days when AT&T and Cingular were separate companies, AT&T usually did not limit what users could do with phones on their network (other companies disabled some features). With various phones, one could set the frequency with which they would scan for and switch to the base station with the strongest signal. Increasing the frequency led to a shorter battery life but reduced the amount of dropped calls (especially, when driving). However, continually switching from base station to base staion puts a bit more of a burden on the wireless operator. Similar to establishing a hundred outbound connections to download a web page quickly, this works well when one is the only person doing it but does not work well if everyone is doing it. So, these days, the ability to change the frequency with which a phone will scan for and switch to the base station(s) with the strongest signal can usually not be changed by the user.
With the iPhone 3G, this pre-set frequency for 3G currently appears to be very low and ill suited for driving. When briefly entering an area with low or nonexistant 3G reception (e.g., the core of a large building) and heading back to a window, the phone will start to show 1 bar or "no service" and can take upwards of a minute to show 5 bars of 3G reception. The low pre-set frequency may be Apple's attempt to maximize battery life in areas where all 3G base stations are far away and where the phone might be inclined to keep switching between base stations due to slight fluctuations in reception.