If I'm not mistaken.
Your process can either work in 2 ways.
First if the process completes without persistence (startProcess completes the entire processInstance). Hence, the ksession within the workItems are still there before dispose is called.
Second scenario is with persistence. When your process stops somewhere the current processInstanceInfo is saved. When you want to resume the process a new ksession is created and
the workItemHandlers are registered again. The processInstance can still proceed smoothly using the new ksession.