The tokens in the Wait for Event activity are the result of 'merging' multiple tokens in the Batch activity. They only have a reference to 'their' item. This worked, because if the order of items is not changed, the first token in each batch is the one belonging to the item that will be retained in the combiner. By removing items from the queue and re-inserting them later, you change the order of items, meaning it is very likely for the 'token-item' to get destroyed in the join process.
To prevent any issues, the input of the combiner needs to be closed while an item is removed for QA. And that item must later be put back into the queue at the same position (rank) it had before it was taken away.
(Technically the combiner input can stay open, but you need to make sure that the item is returned to the queue before it is "its turn". The correct rank, in case more items entered in the mean time and the item is not the last in the queue anymore, could be determined by storing the current rank of the item and the total queue output when it is pushed to the sampling list and then use those to compute the new rank based on the total output of the queue when it is returned to the queue.)
Processing multiple items before returning any can be done by increasing the priority on the processor and allowing the process task to preempt others.
You can add additional objects as "accessories" to the operator in the animation editor (rightclick -> Edit -> Animations). If you also change the animations it uses in its properties, making it look like they are pushing a cart isn't too difficult. (There literally is a pre-made animation called "PushCart").