думаю тут проблема в том, что условие

Код AS3:
if((evt.target.x * evt.target.x) + (evt.target.y * evt.target.y) > radius * radius)
выполняется несколько раз подряд
вобще наверное немного неверный подход использован,
во первых, рыбка не плавает вот так:
но это скорее всего обычная недоработка, суть в алгоритме:
рыбка не плавает от края к краю, значит нам нужно просто узнать следующее положение рыбки и двигать ее туда:
мы имеем круглый аквариум, и знаем текущее положение рыбки, довольно просто вычислить следующее положение - например так: нужно взять случайный угол между 0 и 360 град. и от центра аквариума взять случайное расстояние по этому направлению, но не меньше какого-то значения.. скажем r/4, и не больше r (r-радиус аквариума)
далее я бы просто использовал бы Tweener и двигал рыбку с неким easeInOutSine до этой точки, после достижения ее, выбираем следущую точку, да и еще нужно исключить точки выше зеленой линии, так как там воды нет
p.s. вобще надо посмотреть видео реальных аквариумов, как там плавают рыбки, то есть врятли у них все время одинаковая скорость, + угол подъема наверно не больше 30-40 градусов (в нормальных условиях), + они имеют свойство просто "стоять" на месте, вобщем алгоритм на самом деле не такой простой если нужно добиться хоть какого-то реализма