1. Все координаты флеша задаются в твипсах (1/20 пикселя), значит все координаты должны быть кратны 0,05. А _y - это геттер/сеттер, а не прямое обращение к координатам
2. У флеша, как и у многих языков, точность математических вычислений с дробными числами не идеальная.
Изменим код

Код:
onEnterFrame = function () {
s1_mc._y += 0.05;
var z:String = " = ";
if (s1_mc._y > 2.15) {
z = " > ";
} else if (s1_mc._y < 2.15) {
z = " < ";
}
trace (s1_mc._y + z + " 2.15 " + " | " + (2.15 - s1_mc._y));
};
s1_mc._y = 1.95;
и получим

Код:
2 < 2.15 | 0.15
2.05 < 2.15 | 0.0999999999999996
2.1 < 2.15 | 0.0499999999999998
2.15 = 2.15 | 0
2.15 = 2.15 | 0
2.15 = 2.15 | 0
...
Как видим, в какой-то момент разница была не кратным 0,05 (строчка 2 и 3), это значит, что _y был равен не 2.05 или 2.1, а чуть-чуть-чуть больше, но на столько, что флеш отбрасывал при выводе. Причина эта в пункте 2.
В какой-то момент ошибка накапливается и флеш округляет значение, чтобы оно было кратным 0,05.
Исходя из трейсов, можно предположить, что при сложении 2.15 + 0.05 результат опять не равен 2.2, а меньше и флеш округляет до 2.15
ps.
Еще один код

Код:
onEnterFrame = function () {
var y = s1_mc._y + 0.05;
s1_mc._y = y;
trace (y + " " + (s1_mc._y - y));
};
s1_mc._y = 2.0;
И трейс к нему

Код:
2.05 4.44089209850063e-16
2.1 0
2.15 0
2.2 -0.0499999999999998
2.2 -0.0499999999999998
2.2 -0.0499999999999998
2.2 -0.0499999999999998