In reply to chalk bunny:
You need to make sure the mapping tools are not manipulating the points when you load the GPX file (you should use a single GPX file, and use the identical points in different programs). Whilst point thinning can be useful when importing recorded tracks, and converting to routes (WheresThePath was rather good at this), you need to use exactly the same points if you want to compare distances.
Then you need to consider if the tool is using 2D or 3D path lengths, and, if the latter, what terrain database it is using. Finally, you might even need to consider what projection it is using when calculating route segment lengths; converting WGS84 lat/long to OSGB36 GRs and then using those to compute segment lengths is likely to give different values if you convert to a different projection.
Ascent & descent are notoriously difficult to measure accurately, due to the digital terrain model used, and its resolution & accuracy. Traditional contour counting is also inaccurate, especially if comparing with captured GPS logs (imagine walking over sand dunes just less than 5m tall, none of which would break contours, but would be 5m ascent/descent every dune...
Oh, and, for recorded tracks, there's always the problem of noise; random error in each position can increase the segment length. The higher the frequency of point recording, the greater the significance this noise becomes (since the noise magnitude becomes comparable to the actual segment length). The fractal geometry of nature, and all that.
Post edited at 00:33