Seems like the basic math of the preloader is off. You're using bytes loaded and bytes total but then you jump to frames as a measurement in order to set off the gotoAndPlay action. If you measure the amount loaded in bytes then, then when bytes = 100% that will set off the gotoAndPlay action.
Here's a sample preloaded that's using a mask but you still should be able to see the flow of the actionscript calculations from it.
Code:
stop();
mask_mc._height = 1;
this.onEnterFrame = function():Void {
	var loadedData:Number = this.getBytesLoaded();
	var allData:Number = this.getBytesTotal();
	var percent:Number = Math.round(loadedData/allData*100);
	mask_mc._yscale = percent;
	if (loadedData>=allData) {
		gotoAndStop(10);
		delete this.onEnterFrame;
	}
};
Best wishes,
Eye for Video
www.cidigitalmedia.com