How to fix a bug in one of my games?

There’s a bug in one of my games called A.I Test: Top-Down where diagonally moving non-walkable tiles in the 4th map the player can access will move in a gradually shrinking range and when they stop moving, they drift off. If you want to see the bug, go to A.I Test: Top-Down by CreeperExplodeMakesGames1, download V1.1, and press N until you go to the 4th map. Here’s the code for the moving tiles.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MovingTile : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        x = transform.position.x;
        y = transform.position.y;
    }

    // Update is called once per frame
    void Update()
    {
        transform.position = new Vector2(x + xoffset, y + yoffset);
        if (xchanging)
        {
            if (increasing)
            {
                if (reversed)
                {
                    xoffset -= Time.deltaTime;
                }
                else
                {
                    xoffset += Time.deltaTime;
                }
            }
            else
            {
                if (reversed)
                {
                    xoffset += Time.deltaTime;
                }
                else
                {
                    xoffset -= Time.deltaTime;
                }
            }
            if (xoffset <= 0f & !reversed | xoffset >= 0f & reversed)
            {
                increasing = true;
            }
            else if (xoffset >= 1f & !reversed | xoffset <= -1f & reversed)
            {
                increasing = false;
            }
        }
        if (ychanging)
        {
            if (increasing)
            {
                if (reversed)
                {
                    yoffset -= Time.deltaTime;
                }
                else
                {
                    yoffset += Time.deltaTime;
                }
            }
            else
            {
                if (reversed)
                {
                    yoffset += Time.deltaTime;
                }
                else
                {
                    yoffset -= Time.deltaTime;
                }
            }
            if (yoffset <= 0f & !reversed | yoffset >= 0f & reversed)
            {
                increasing = true;
            }
            else if (yoffset >= 1f & !reversed | yoffset <= -1f & reversed)
            {
                increasing = false;
            }
        }
    }
    private float x;
    private float y;
    private float xoffset;
    private float yoffset;
    public bool xchanging;
    public bool ychanging;
    public bool reversed;
    private bool increasing;
}

Honestly, i’d suggest to rewrite this. This is maximal convoluted code and it would be nice if you could just upload the footage of your problem. I will not go and download the game to search for a bug and i doubt there are people who’ll go this far.

That being said:
From what i understand you just want to move your tile between a certain maximum x/y points starting from the original position right?

There are way more readable approaches to do this:

public class MovingTile : MonoBehaviour {

        void Start ()
        {
            x = transform.position.x;
            y = transform.position.y;
            if(xchanging)
                StartCorouting(MoveX());
            if(ychanging)
                StartCorouting(MoveY());
        }

        public void Update()
        {
            if(reversed)
                   transform.position = new Vector2(x - xoffset, y - yoffset);
            else
                   transform.position = new Vector2(x + xoffset, y + yoffset);
        }

        public IEnumerator MoveX()
        {
            while(true)
            {
                while(xoffset < 1) {
                    xoffset += Time.deltaTime;
                    yield return null;
                }
                while(xoffset > 0) {
                    xoffset -= Time.deltaTime;
                    yield return null;
                }
            }
        }

        public IEnumerator MoveY()
        {
            while(true)
            {
                while(yoffset < 1) {
                    yoffset += Time.deltaTime;
                    yield return null;
                }
                while(yoffset > 0) {
                    yoffset -= Time.deltaTime;
                    yield return null;
                }
            }
        }
    }

In it we have 2 coroutines which take care of simply moving x/yoffset between 0 and 1. Here we don’t care about your reversed state.
The reverse state then only applies to our end result if we add or substract it from the original position.
Tbh i don’t get why your current code does not do it’s thing but in the end it is difficult to tell as it is written in a really confusing way.