How to make a smooth object look less 'lumpy'
Here's a self-answer, based on information from the comments. There is a very nice trick to this, which is to model using Bézier curves instead of just relying on the subdivision surface modifier.
The basic procedure is to do shift-A -&gt; Curve -&gt; Bezier. Then in properties there's a curve panel where you can turn it into 2D, which makes editing easier. Then you can add a 'screw' modifier, followed by subdivision surface and, in my case, solidify.
Here's how the object looks modelled with curves:

The weird lumpiness has gone, and in addition, editing is much quicker and more painless, and it's easier to be accurate.
It looks like this when editing. I only have to change a couple of control points to change the slope of the curve - the geometry is generated automatically.