it's hard to help you here without you providing more data. The code looks ok and as if it was doing something. If that something is what you want or need is another matter.
I have this working to some degree, but it is very, very jumpy.
Well here we have the core of the problem. It could be many things.
First you should investigate the behaviour of sensorValue. If the input data itself is jumpy, expecting anything besides a jumpy output would be unreasonable. Also pay attention how well the range from sensorMin to sensorMax is used. If after your calibration sensorValue jumps mostly between too low and too high, you have a problem to work on. Also if the spread between sensorMin and sensorMax is below the output range of 256 levels, map() won't take advantage of the additional levels in between. You'll have to fix the jumpiness in other ways in this case.
Once you get reasonable smooth input values, you then can start working on the output side if the problem persists. Here again, you need to investigate what kind of jumpiness you see. You might end up to rework you mapping algorithm to something a little better tuned to your needs than just you the plain call to the map() function. But to know which algorithm works better, you need to understand the problem first.
Perhaps this gives you some ideas on how to proceed. If you have more information, we might be able to help you more.