Нужно сменить глубины и ждать до следующего нужного момента, а у вас непрерывно идет swapDepths.
В общем, в логике ваших передвижений я не стал разбираться, но решение есть:
берем за основу постулат о том, что объект, который больше в вашем проекте, должен заслонять более маленький, т.е. удаленный в перспективе.
Поэтому признаком смены глубин будет момент, когда _xscale, одного будет больше, чем _xscale другого.
Кроме того, нужно ввести триггер того, что смена произошла, чтобы не теребить непрерывно swapDepths.
И еще заранее определим свободные уровни. У вас ведь изначальный аттач происходит на уровни 1 и 2, они заняты, поэтому, во избежание, используем getNextHighestDepth();
Таким образом, получаем код:

Код AS1/AS2:
var backLevel:Number = this.getNextHighestDepth();
var frontLevel:Number = backLevel + 1;
wasSwaped_1 = false ;// признаки смены глубин
wasSwaped_2 = false ;// признаки смены глубин
_root.onEnterFrame = function() {
if (mw._xscale > mw2._xscale && !wasSwaped_1) {
mw.swapDepths(frontLevel); //выходит вперед
mw2.swapDepths(backLevel);//уходит назад
wasSwaped_1 = true ;
wasSwaped_2 = false ;
}
if (mw._xscale < mw2._xscale && !wasSwaped_2) {
mw.swapDepths(frontLevel);
mw2.swapDepths(backLevel);
wasSwaped_2 = true ;
wasSwaped_1 = false ;
}
//.... тут ваша анимация и изменение масштабирования мувиков
}
Код избыточен, можно попробовать сделать и одной проверкой, но сейчас не соображу.