Timing circuitry has gotten extremely accurate while remaining really cheap. Positional accuracy is the problem. If speed is calculated from positional data, it is noisy. Max speeds are usually unrealistically too high.
Doppler speeds use the timing circuits, not the positional calculations, and are typically much more accurate. K888 states that doppler speed calculations even typically include kalman filtering.
K888 has also stated, from his studies, that pretty much all modern GPS chipsets measure speeds with doppler, but many (or most) of them record the speeds from positional data. To me this is crazy.
K888 examined a FIT file I sent him from my Timex Ironman GPS watch. He saw that my FIT file contained speed data taken from doppler, and recorded as such in the file. The Timex Connect app shows the max speed from these data, but Strava ignores speed numbers in my FIT file and calculates max speed from positional data; this max speed is always 10-20% higher and is not even realiistic.
I sent Strava an email asking them to change their programming to use speed numbers if the upload file already contains them.
GoldenCheetah does indeed use the speed numbers in the FIT file. I don't know about other apps.
You can read K888's stuff here:
logiqx.github.io/gps-guides/logiqx.github.io/gps-guides/sessions/contacts/marr/