I'm on holidays now in Greece and I'm happy with my GPS.
Before I left, I tried everything that was suggested here and I mean everything. The last thing I tried, with which I noticed a much stabler lock but still not great accuracy when I tried on the bus (I don't own a car in London), was deleting the secgps.conf file (in /data/gps), which is autogenerated when you run that secret test menu. When you reboot the phone, it generates it with its default settings, which include NUM_OF_FIX=999999999 instead of 0, and do not have TIME_BTW_FIX=0. Also SESSION_TYPE is changed to 2, instead of 1 and SERVER_MODE is 0 instead of 1.
If you run the *#147.. test, it immediately gets overwritten with the other values, even if you don't change anything in the test (This means that if that file plays a role in the GPS settings, you have changed it just by entering the test code, and you should change it back anyway! - by deleting it and rebooting).
I have no idea if this is what made a difference. But these last few days in my car, with the phone in a car holder, I have been navigating with Sygic and not a single drop, and even the displayed speed is correct most of the time. I can't ask for more from an in-car GPS. It's still not as extremely accurate as my old external bluetooth GPS that I used with my Nokia, but so far it hasn't failed to tell me 'turn' when I should. I'm very happy with it.
Simon, since you have rooted your phone now, you can try this and see if it makes a difference.
My wifi and wifi location is off, but I don't think that matters.
I have limited data here, so I set it to 'always 2G'. I also have the gps.conf (in /system/etc) set to the european ntp server, but I also don't think that matters, since I don't use A-GPS.
Unfortunately I still don't think it's usable for walking. GPS Test shows that it loses fix when the screen autorotates, and I also think the reception is affected by holding it with your hands (someone else has mentioned this too). I will test this further in the coming days.