El problema es que en esta línea:
Al asignar $eje_y a otra variable cuando el puntero interno del array está fuera del rango el puntero vuelve al inicio del array. Por eso la llamada a current() en la condicional del while nunca devuelve falso. Una solución sería mover la llamada a next() justo antes del fin del bloque while.