смущает то, что маска не может быть в твоем случае под загруженным клипом, потому, что маску ты создал первой, значит она должна отобразиться как минимум под загружаемым клипом. Ты же сам его создал после маски, взяв следующую наибольшую глубину - верно?

Код:
this.createEmptyMoviClip("mask_mc", this.getNextHighestDepth());
фываывафы
this.createEmptyMovieClip("clip_mc", this.getNextHighestDepth());
вот практически твой код, только без линка и работает.

Код:
var mask:MovieClip = _root.createEmptyMovieClip("mask_mc", this.getNextHighestDepth());
mask.beginFill(0x000000);
mask.lineTo(0,50);
mask.lineTo(50,50);
mask.lineTo(50,0);
mask.lineTo(0,0);
mask.endFill();
var clip:MovieClip = createEmptyMovieClip("clip_mc", this.getNextHighestDepth());
clip.setMask(mask);
clip.attachMovie("asd","asd",0);
я не знаю, в какой последовательности и из каких мест были взяты куски из кода, но проблема все-таки в именах(в видимости клипов)