As usually happens in life, after I explain a problem, a solution comes to mind.
I've cut it down to 2 FSMs on the conveyor, one detects trigger events then adds/removes them from an array on the second FSM, the second FSM then loops through the array applying a velocity to each one, when it reaches the end of the array it does a next frame event and starts over.
This seems to work well at the moment, it's also shone a light on some of my misconceptions as to how much can occur in one frame.