I was stopped for speeding by a cop with a radar and he told me 128km/h. I refrained to tell him that was exactly what my GPS was saying...
My car speedo was telling me 130km/h
Soo... ANY GPS with at least 4 satellites will be very precise on speed. The difference cause by hills is minuscule since we normally don't change altitude by 500 feet per second. It's gradual enough the effect isn't worth talking about, even if it does exist. Trees, mountains besides you, canyons and building, all those do affect accuracy because you might loose some satellites.
A GPS defines speed as the time it took between 2 position reading so, the actual position isn't relevant as long as the positioning error is relatively constant. So when calculating the speed going uphill or downhill, the GPS don't need accurate measurement on the altitude, at least in a car. It just need accurate change of altitude so, if the GPS is really at 300 feet and going down to 250 feet, it doesn't matter if it think it's at 500 feet and going to 450 feet, as long as it know it moved 50 feet.
As far as curves, it's irrelevant since the horizontal position is what matters the most and horizontal precision is usually within 10-15 feet so, when driving 60mph, 10-15 feet is done very fast and curves are usually (?) longer than 10-15 feet. There is probably a difference on paper but that difference is likely to be even less than the one caused by hills and I doubt anybody driving cares to go into "0.0something mph" differences.