Thanks HuiSheng,
Yes I did re-get the process instance. It did not help.
However, I found a workaround. Instead of calling
ExecutionService.setVariable(executionId, "X", "new value");
I pass a map of variables (and their new values) to the TaskService.completeTask() call. This works just fine for me since I only need those new values in the subsequent steps.
Thanks.
Yongtao