Strange shifting when reseting player position to origin

I’ve been working on a script that will reset the position of the player back to the origin(0,0,0), when a certain object is touched. The object resets it’s position fine at first, but then drifts several units to one side before stopping, which I don’t want.
This is the code:

using UnityEngine;
using System.Collections;
 
public class ControllerScript : MonoBehaviour {
    public float speed = 1.0f;
 
    public Vector3 endPos;
    public static bool moving = false;
	public static int health = 100;
    private Vector3 initialPosition;
	private Quaternion initialRotation;
    void Start () {
       endPos  = transform.position;
	   initialPosition= transform.position;
	  initialRotation=transform.rotation;
    }
 
    void Update () {
		bool hittingForward=false;
		if(Physics.Raycast(transform.position, Vector3.forward, 1)){
			hittingForward=true;
		}
			bool hittingRight=false;
		if(Physics.Raycast(transform.position, Vector3.right, 1)){
			hittingRight=true;
		}
			bool hittingLeft=false;
		if(Physics.Raycast(transform.position, Vector3.left, 1)){
			hittingLeft=true;
		}
			bool hittingBackwards=false;
		if(Physics.Raycast(transform.position, -Vector3.forward, 1)){
			hittingBackwards=true;
		}
		
       if (moving && (transform.position == endPos)){
         moving = false;
			}
       if(!moving && Input.GetKey(KeyCode.W) && hittingForward==false){
         moving = true;
         endPos = transform.position + Vector3.forward;
       }
		if(!moving && Input.GetKey(KeyCode.D) && hittingRight==false){
         moving = true;
         endPos = transform.position + Vector3.right;
       }
		if(!moving && Input.GetKey(KeyCode.A) && hittingLeft==false){
         moving = true;
         endPos = transform.position + Vector3.left;
       }
		if(!moving && Input.GetKey(KeyCode.S) && hittingBackwards==false){
         moving = true;
         endPos = transform.position - Vector3.forward;
       }
 
       transform.position = Vector3.MoveTowards(transform.position, endPos, Time.deltaTime * speed);
		if(health==0){
			Destroy(gameObject);
	}
}
void OnTriggerEnter(Collider col){
		if(col.gameObject.tag=="Finish" && overseer.floors<60){
			Debug.Log ("colliding");
			GameObject[] name1=GameObject.FindGameObjectsWithTag("room");
			GameObject[] name2=GameObject.FindGameObjectsWithTag("environment");
			GameObject[] name3=GameObject.FindGameObjectsWithTag("Trap");
			GameObject[] name4=GameObject.FindGameObjectsWithTag("Path");

			foreach(GameObject room in name1){
			Destroy(room);
			}
			foreach(GameObject environment in name2){
			Destroy(environment);
			}
			foreach(GameObject Trap in name3){
			Destroy(Trap);
			}
			foreach(GameObject Path in name4){
			Destroy(Path);
			}
			Destroy(GameObject.FindWithTag("Finish"));
			overseer.floors++;
			overseer.nextfloor=true;
			transform.position=initialPosition;
			transform.rotation=initialRotation;
		}
	}
}

does anyone know why this would be happening? I don’t have any animations on the character yet, so that wouldn’t be an issue.
thanks.

Between lines 84 and 85, insert:

endPos = initialPosition;

Currently you are not resetting endPos, so line 56 is still trying to move your object to endPos.