The problem is that the software is not switching from GPS to A-GPS when there is no GPS signal. So if you are on 3G, and you are inside so you aren't seeing the satellite, the iPhone is supposed to switch over to A-GPS and triangulate your position based upon nearby wifi spots and cell towers. It isn't making this switch. If you are on EDGE, it just apparently uses A-GPS, suggesting that the GPS signal is carried over 3G.
This behavior was confirmed at the Genius Bar at my local Apple Store; we tried 4 or 5 phones and they all behaved the same way: when on 3G, infinite wait for GPS if inside; when on EDGE (we turned off wifi so we could see what network we were on; this is a somewhat fringe 3G area so it would go back to EDGE occasionally, enabling this test - no, that isn't the problem, because the same thing is happening with strong 3G signals), obvious A-GPS is called upon.
Anyway, this seems like a fairly simple bug for Apple to fix. The problem is 1: getting them to know about it, and 2: getting them to care about it. I have no clue how to do either.