Ciao..

MC1 si porta sì sulla seconda label, ma ne rimane bloccato, come se ci fosse un comando stop();
Questo comportamento, da quanto hai scritto, è più che giusto perchè la funzione onEnterFrame che hai dichiarato viene sempre considerata anche dopo che MC1 si porta sul frame "r2".

Infatti la condizione indicata
codice:
if (getTimer()-tempo>5000) {
_root.MC1.gotoAndPlay("r2");
}
... una volta resa vera, porterà "ripetutamente" MC1 sul frame "r2", a prescindere dall'azione gotoAndPlay.

Analogamente con questa azione
codice:
_root.MC1.play();
sarà eseguito ripetutamente il play che farà "saltare" gli eventuali stop presenti nella time-line.

Una soluzione potrebbe essere quella di eliminare la funzione onEnterFrame una volta verificata la condizione, ad esempio in questo modo:

codice:
onEnterFrame = function () {
if (getTimer()-tempo>5000) {
_root.MC1.gotoAndPlay("r2");
delete onEnterFrame
}
}
Però a mio parere il metodo che hai utilizzato non è tanto pulito.
Ti consiglierei l'utilizzo del setInterval per creare delle temporizzazioni in modo più preciso.

Eventualmente consulta la guida in linea di Flash o cerca l'argomento sul forum, sicuramente è stato già discusso varie volte.