RESOLVED: Struggling with a timer using Time.time

This game uses a timer to move a target every 10 seconds. The logic is:

now = Time.time;

if (now - 10 > last)
{
    last = now;  // reset the timer
    MoveTarget();
}

As you can see, the 10 second cycle restarts immediately when the previous one expires. It can also have the time period reset whenever the ball gets close to the target with this code:

distance = Vector3.Distance(target.transform.position, ball.transform.position);

if (distance < 1.1)
{
    last = now;  // reset the timer
    MoveTarget();
}

The problem is that when the timer is reset because the ball is close to the target, the result is multiple timer triggers. For example, let’s say the timer is reset at 5 seconds because the ball is close to the target, I would expect the timer to expire on every subsequent multiple of 5 seconds (5, 15, 25, 35 etc.). What I am actually getting is the timer expiring at every 5 second multiple AND every 10 second multiple (5, 10, 15, 20, 25 etc.)

Can someone help me understand why this is happening?

Here is the full script code:

using UnityEngine;
using UnityEngine.SceneManagement;

public class Movement : MonoBehaviour
{
    //   private float xAngle, zAngle;
    private GameObject ball, target, platform;
    private float x, z;
    private float now, last;
    private float distance;

    void Update()
    {
        // move the platform according to the inputs
        platform = GameObject.Find("Platform");
        float xAngle = Input.GetAxis("Vertical") * .25f;
        float zAngle = -Input.GetAxis("Horizontal") * .25f;
        platform.transform.Rotate(xAngle, 0, zAngle, Space.Self);

        // see if it's time to move the target and lose a point
        now = Time.time;

        if (now - 10 > last)
        {
            last = now;  // reset the timer
            MoveTarget();
        }

        // see if the ball is near the target and gain a point if it is      
        target = GameObject.Find("Target");
        ball = GameObject.Find("Ball");

        distance = Vector3.Distance(target.transform.position, ball.transform.position);

        if (distance < 1.1)
        {
            last = now;  // reset the timer
            MoveTarget();
        }
    }

    void OnCollisionEnter(Collision col)
    {
        if (gameObject.name == "killZone")
        {
            // print("Detected collision between " + gameObject.name + " and " + col.collider.name);
            // print("There are " + col.contacts.Length + " point(s) of contacts");
            // print("Their relative velocity is " + col.relativeVelocity);
            // Destroy(col.gameObject);
            last = now;
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
        }
    }

    void MoveTarget()
    {
        if (target != null)
        {
            x = UnityEngine.Random.Range(-.42f, .42f);
            z = UnityEngine.Random.Range(-.42f, .42f);
            target.transform.localPosition = new Vector3(x, .46f, z);
        }
    }
}

Do you have more than one instance of this script active?

That is exactly what was wrong. Thank you!