Okay, I looked at your test.
The reason is because a call activity _is_ actually a real process instance (it will show up in queries as such).
Hence, when you set your variable
runtimeService.setVariable(pi.getId(), "action", "task2");
You're setting it on the main process, not on the new started process.
Add the following line and it will work:
ProcessInstance newProcessInstance = runtimeService.createProcessInstanceQuery().superProcessInstanceId(pi.getId()).singleResult();
runtimeService.setVariable(newProcessInstance.getId(), "action", "task2");