Variables set with the "setVariables()" command on a child-execution, are by default set on the process-instance UNLESS the variable is defined locally on that execution, or on a parent execution in the tree (the variable-set request will bubble up the execution-tree until an execution is found where the variable is set locally, and will set the value there).
So in your case, the variables will be set on the process-instance, rather than on the mobile or user-execution. To prevent this, you should call setVariable(s)Local(executionId, …). This will keep the variables stored on the child-execution. Beware, that all variables that are needed after the parallel-paths joins again, should be set explicit ally on the process-instance. Once the parallel paths disappear, the variables for it, are destroyed.