Hi Miljenko,
I just look at your case and I think that it is very strange behavior. I debug it a bit and it turned out that the issue is in fact related to the signal event. It is stored under externalEventListeners map of WorkflowProcessInstanceImpl which is a super class for RuleflowProcessInstance.
I made very quick change in that class to make this map transient - after that your process completed successfully with firing of the rule - since the process instance was found in the session.
I made yet another test to verify if that did brake anything (as far as I could test it) so I made your process run in two steps:
1. create process instance and dispose the session
2. load the session, load the process instance and signal it
all steps went fine, no exception whatsoever.
So question is why that map is not serialized and should it be serialized? I thought events are kept in DB...
what do you think about it?