It is also possible for GPS to way overestimate the total climb in comparison to contour counting method. Your experience of the GPS underestimating is quite possible, but in my experience, comparatively rare.
Greenbank has explained the problem well. Another way of looking at it is that the GPS climbing figure is very highly dependent on the frequency with which elevation is recorded. So if your device is set to record elevation, say every 10m you move along the road, it is likely to catch most of the little bumps and dips you ride over. If it is set to record every 500m on the ground, then many of those bumps will be missed, and so your total climb will appear lower.
This is a problem that affects total elevation much more than it does total distance traveled because you tend to undulate much more in an up-down direction on typical UK roads than you do in a left-right direction. In contrast, on a long alpine climb, there is comparatively little vertical undulation - it being just one long steady climb. In theory this could be captured pretty much with just two readings - one at the bottom of your climb and one at the top.
On a 200km ride through Essex and Suffolk I did last year I rode with two identical GPS receivers, but one set to a high recording frequency the other to a medium recording frequency. The difference in distance between the two units was less than 1km in 200. Yet the high recording frequency GPS recorded almost double the total climb than the other GPS.
In my view GPS climbing figures are way too dependent on their recording frequency to provide objective climbing figures unless they are recorded with a known fixed frequency. One of the reasons the contour counting method works well as a standard measure is that it effectively fixes the recording frequency (as determined by the OS cartographers).