Troubles with animations and blend trees

So right now I have a walking animation and I have a blend tree set up for walking up, down, left and to the right. Problem is that when the key is let go it seems the animation gets defaulted to the first animation on the blend tree list.

When exit time is turned off this does not seem to be the problem the only thing is is that with exit time off the and if the player only moves one tile over no part of the animation will play so it will seem as if though the player is sliding.

Here is my movement code and I also posted a gif below of what the animation looks like now as well as apicture of the blend tree it self.

  public enum Direction
    {
        Up,
        Down,
        Left,
        Right
    }

    Direction currentDir = Direction.Down;
    public bool canMove = true, moving = false;
    public float walkSpeed, runSpeed;
    public int buttonCooldown = 0;
    private Vector3 pos;
    public float gridLength;
    public bool moved;
    public bool isWalking;
    public bool isRunning;
    public GameObject tile;
    Animator anim;
    Animator playerAnim;

    public Vector2 lastMove;

    // Use this for initialization
    void Start () {
        tile = this.gameObject.transform.GetChild(0).gameObject;
        anim = tile.GetComponent<Animator>();
        playerAnim = GetComponent<Animator>();
    }
   
    // Update is called once per frame
    void Update () {
        RunWalkSwitch();
        playerAnim.SetBool("PlayerMoving", false);
        playerAnim.SetBool("PlayerRunning", false);

        if ((Input.GetAxisRaw("Horizontal") > 0.9f || Input.GetAxisRaw("Horizontal") < -0.9f) && isWalking)
        {
            playerAnim.SetBool("PlayerMoving", true);
            playerAnim.SetBool("PlayerRunning", false);
            lastMove = new Vector2(Input.GetAxisRaw("Horizontal"), 0f);

        }else if ((Input.GetAxisRaw("Vertical") > 0.9f || Input.GetAxisRaw("Vertical") < -0.9f) && isWalking)
        {
            playerAnim.SetBool("PlayerMoving", true);
            playerAnim.SetBool("PlayerRunning", false);
            lastMove = new Vector2(0f, Input.GetAxisRaw("Vertical"));

        }else if ((Input.GetAxisRaw("Horizontal") > 0.5f || Input.GetAxisRaw("Horizontal") < -0.5f) && isRunning)
        {
            playerAnim.SetBool("PlayerRunning", true);
            playerAnim.SetBool("PlayerMoving", false);

            lastMove = new Vector2(Input.GetAxisRaw("Horizontal"), 0f);

        }else if ((Input.GetAxisRaw("Vertical") > 0.5f || Input.GetAxisRaw("Vertical") < -0.5f) && isRunning)
        {
            playerAnim.SetBool("PlayerRunning", true);
            playerAnim.SetBool("PlayerMoving", false);

            lastMove = new Vector2(0f, Input.GetAxisRaw("Vertical"));

        }

        playerAnim.SetFloat("LastMoveX", lastMove.x);
        playerAnim.SetFloat("LastMoveY", lastMove.y);

        buttonCooldown--;
        moved = false;

       

        if (canMove)
        {
            pos = transform.position;
            Movement();
        }

        if (moving)
        {


            if (transform.position == pos)
            {
                moving = false;
                canMove = true;
                Movement();
              

            }
            if (isWalking)
            {
                transform.position = Vector3.MoveTowards(transform.position, pos, Time.deltaTime * walkSpeed);
            }else if (isRunning)
            {
                transform.position = Vector3.MoveTowards(transform.position, pos, Time.deltaTime * runSpeed);
            }

        }
       
    }

    void Movement()
    {
        if(buttonCooldown <= 0)
        {
            if (Input.GetAxisRaw("Vertical") > 0.5f)
            {
                if(currentDir != Direction.Up)
                {
                 
                    buttonCooldown = 5;
                    currentDir = Direction.Up;
                }else
                {

                    canMove = false;
                    moving = true;
                    moved = true;
                    pos += Vector3.up / gridLength;
                }
              
            }else if (Input.GetAxisRaw("Vertical") < -0.5f)
            {
                if(currentDir != Direction.Down)
                {
                 
                    buttonCooldown = 5;
                    currentDir = Direction.Down;
                }else
                {
                    canMove = false;
                    moving = true;
                    moved = true;
                    pos += Vector3.down / gridLength;
                }
            }else if (Input.GetAxisRaw("Horizontal") < -0.5f)
            {

                if (currentDir != Direction.Left)
                {              
                    buttonCooldown = 5;
                    currentDir = Direction.Left;
                }else
                {
                    canMove = false;
                    moving = true;
                    moved = true;
                    pos += Vector3.left / gridLength;
                }
            }
            else if (Input.GetAxisRaw("Horizontal") > 0.5f)
            {
                if (currentDir != Direction.Right)
                {
                 
                    buttonCooldown = 5;
                    currentDir = Direction.Right;
                }
                else
                {
                    canMove = false;
                    moving = true;
                    moved = true;
                    pos += Vector3.right / gridLength;
                }
            }

            playerAnim.SetFloat("MoveX", Input.GetAxisRaw("Horizontal"));
           
            playerAnim.SetFloat("MoveY", Input.GetAxisRaw("Vertical"));
          
        }

    }

    void RunWalkSwitch()
    {
        if(Input.GetKeyDown(KeyCode.E) && isWalking)
        {
            anim.SetBool("SwitchToRun", true);
            anim.SetBool("SwitchToWalk", false);

            isRunning = true;
            isWalking = false;
        }else if(Input.GetKeyDown(KeyCode.E) && isRunning)
        {
           
            anim.SetBool("SwitchToWalk", true);
            anim.SetBool("SwitchToRun", false);
            isRunning = false;
            isWalking = true;
        }
    }

    void EndRunTileSwitch()
    {
        anim.SetBool("SwitchToWalk", false);
        anim.SetBool("SwitchToRun", false);
    }

3187384--243269--animationproblem.gif

Bump

Bumping this 'cause I am having the exact same issue!