потому что интервалу насрать на области видимости.
можно (и нужно) так:

Код:
my_btn.onRelease = function() {
var i:Number = 2;
interval:Number = setInterval(function (scope) {
scope.i++;
trace(scope.i);
scope.removeMovieClip("mc"+i]);
scope.mc1.duplicateMovieClip("mc"+i, scope.getNextHighestDepth(), {_x:Math.floor(Math.random()*1000), _y:Math.floor(Math.random()*1000)});
if (scope.i>20) {
scope.i = 2;
}
}, 300, this);
}
кстати, не стоит мешать акшн скрипт 2 и 1н