It appears it is actually quite hard to get constant speed along a bezier but I'm not too worried given the usage I need.
The basic idea is that the curve is stored as a sequence of points, each with an associated control point, the control point of the last point being unused, and storing the pre-computed length of each curve with each point.
The class that looks after this data then returns a point based on the input of a distance along the curve.
First, easy early outs. If distance<=0, return the first point. If distance>=total length, return the last point and signal that we have completed the path.
For the rest, start by copying the required distance to a variable remainder. Then loop through each segment. If the length of the current segment is less than the remainder, deduct the length from the remainder then move to the next segment.
When the segment length is greater than the remainder, we have the segment we need to examine. We can then divide remainder by the segment length to get a value between 0 and 1 along the relevant curve.
Then just call the Bezier function on the current curve to get the position.
I've tested this with a cloud moving around a curvy path and seems to work okay apart from the constant speed issue but a bit of googling suggests this is not simple to solve - sampling along T on a curve does not return equidistant points - but I don't really care.
Making the camera follow a curve is more a UI and interface problem now that the actual maths is proven to work so more a ponder in quiet moments problem than a grapple with numbers issue.
Glad I'm not the only one that backed off of the ideal of pure curves and went with subdivided line segments instead :)