Eased rotation Around the player problem

So I was looking into how to achieve an eased rotation around the player and happened upon this page.

After about 2 hours of playing around with it, I was able to get it running. My problem is that when I press the button I assigned the level rotates several times before slowing to a stop. I was trying to get the object to slowly snap 90 degrees while keeping the same position in space. Is there anyone that can help me wrap my head around this?

  var Player : Transform;
var rotateAmount = 90;
var rotateTime = float;
function Update ()
{
    if ( Input.GetKey("z"))
                           // point,  axis, amount, time
        RotateObject(Player.position,Vector3.right ,90,1.0);
}

function RotateObject(point : Vector3, axis : Vector3,
                      rotateAmount : float, rotateTime : float) {
    var step : float = 0.0; //non-smoothed
    var rate : float = 1.0/rotateTime; //amount to increase non-smooth step by
    var smoothStep : float = 0.0; //smooth step this time
    var lastStep : float = 0.0; //smooth step last time
    while(step < 1.0) { // until we're done
        step += Time.deltaTime * rate; //increase the step
        smoothStep = Mathf.SmoothStep(0.0, 1.0, step); //get the smooth step
        transform.RotateAround(point, axis, 
                               rotateAmount * (smoothStep - lastStep));
        lastStep = smoothStep; //store the smooth step
        yield;
    }
    //finish any left-over
    if(step > 1.0) transform.RotateAround(Player.position,  Vector3.right,
                                          rotateAmount * (1.0 - lastStep));
}

Input.GetKey returns true while the key is down, so RotateObject will be called multiple times. Use GetKeyDown instead to call it only once a keypress.