I *may* have a solution... I've had this on-and-off for some time now - This issue had been driving me nuts, but today I think I have got to the bottom of it.
I was in the situation where at work on Cellular, I'd get the widget saying United Kingdom for my location wheras at home it would give the correct town... until I switched to WiFi, when it would say United Kingdom. My wife's android (same network operator) always worked just fine in the same spot so that rules out operator issues as well as the mystical HTC servers. I'd done all sorts of reset short of a factory reset to try to get it to behave but it refused to do so.
What hit me was the significance of it falling apart on wifi at home. Earlier this year, there was a huge privacy furore about iOS and Android devices keeping tabs on users' locations (Android claimed not to keep a log as for iOS devices, but a *cache* for faster resolution).
Anyhoo, I thought this cache was at the centre of the issue so fired up a shell terminal on my rooted Desire and wiped it (I won't go into where it is, there's a much easier way).
After rebooting whilst on WiFi, I forced an update on weather and saw the correct location, yay. But within 10 minutes, it had gone back to saying United Kingdom again. Separately, while I was investigating the cache, I'd installed an app called "Location Cache", by remydemy. I had found that there were a couple of weird locations in my cache with very odd co-ordinates, even after my brutish attack. The app has the option of wiping the cache and advises you to first go into airplane mode before wiping the cache and rebooting. I did exactly that and since then the widget has behaved impeccably.
So, I think, if you have a rooted device, you should use that app to wipe the cache. If you don't have a rooted device, then you'll have to force the cache entries to expire by updating your location on wifi and on cellular in up to fifty different places. There are separate caches for each, and I remember reading that Android only keeps the last fifty places in the cache as a privacy mitigation. I *think* you can force an entry to be cached or refreshed by doing an update in the weather app itself or perhaps by using maps without GPS being active.
I'd be interested in finding out if anyone else finds the same. As I said, this minor issue had been driving me nuts for a while!