bueno setInterval esta bien, aqui el problema puede ser que clearInterval -que borra el tiempo de ejecucion- esta sujeto a la sentencia de una funcion y si antes de que pase el tiempo de llamado (los 3500 mseg) hay algun play por otro lado, quizas tengas algun boton que pueda al presionar cambiar de frame, y algun clip interno que tambien cambie de frame antes de setInterval entonces pueda que por ahi te brinque entre frames, revisa si tienes algun caso de play que pueda ser accionado en el mismo frame donde se esta ejecutando el setInterval
P.e.
Código PHP:
stop();
id = setInterval(function() {play(); clearInterval(id);}, 5000);
var boton:MovieClip = _root.createEmptyMovieClip('boton', _root.getNextHighestDepth());
boton.beginFill(0x0000FF, 100);
boton.moveTo(0, 0);
boton.lineTo(20, 0);
boton.lineTo(20, 20);
boton.lineTo(0, 20);
boton.endFill();
boton._x = Stage.width/2;
boton._y = Stage.height/2;
boton.onRelease = function (){ clearInterval(id); play(); boton.removeMovieClip(); }