Thanks for the extra detail!
Like what Steve suggested, there's a purpose-built feature for this that avoids variables entirely: assignment rules.
Open the user task and set Assign to → Team. Click Add assignment rules and
Include task participant(s): <the task before the approver>
At run time this looks up who actually completed that task in this instance and assigns the task to that person, and only that person. It reads the real completion record rather than a variable, so it works no matter how the earlier task was assigned — specific user, team, or reassigned partway through — and it's completely unaffected by read-only forms.
Setup: you'll need a team containing everyone who could ever perform that earlier task; the rule then narrows it to whoever actually did. The resolved person has to be an active member of that team.