I realized it's been about a month since I posted this question, and wanted to thank those who participated in the discussion. A few days after my final post I was able to find a decently functional solution to the problem using a combination of the suggestions here.
Just for fun, here's what I did:
Since I was getting the strange load cell signal overshoot and couldn't quite isolate where it was coming from, I did a large number of tests starting at different load values, and pulsing the actuator on for different fixed durations. For example: Start at 200 lbf, pulse for 30ms. Wait for the force to stabilize, then copy down the stable value. Then again for 40ms, then 50ms, etc. Then start at 300 lbf, repeat. Etc. From this, a pattern became clear. Subtracting the starting load from the final load, there was a more or less linear correlation (except during acceleration) between pulse duration and change in force (as was expected through the spring load mechanism, but the load cell overshoot was making the actual values somewhat questionable). I carried out this process for both extension and retraction, and curve fit the data. From the resulting equation, I could calculate an on-time pulse duration based on starting force and desired final force.
There are 3 tolerance ranges. The actuator uses this strategy if the force difference is outside the largest tolerance range. If within the large tolerance, but outside of the second range, then I just use short pulses of 30ms to bring it into the final tolerance range.
When setting a new force setpoint, often no additional short pulses are needed, but if they are, it's generally only 1 or 2.