here is a short description of root of the problem.
the start timer is parsed in parseStartEvents method in Bpmnparse. it uses the NoneStartEventActivityBehavior which is also used in normal start event. So, not strangely it is behaved like normal start event and the next activity is started just after starting instance.
After this first execution, a TimerStartEventJobHandler event handler is created by ProcessEngineConfigurationImpl.initJobExecutor. which in turn is run in building process engine and before even starting process instance. in TimerStartEventJobHandler, the instance is restarted another time using StartProcessInstanceCmd method.
So two solutions come to mind:
1. try to stop first calling
2. create a special behavior for timer start event. This behavior does nothing in execute but continues the activiti in signal method.
I think it is not also logical that the start timer event runs before starting the instance itself.
why not behave start Timer the same way as TimerCatchIntermediateEvent ?
I am not also sure that it would function correctly in case a start timer is used in a subprocess.
can any one guide for further debugging ?