Bueno parece que solucionaste el problema .. sin embargo, el detalle del NOP no es precisamente del BTSC sino del GOTO .. ya que el GOTO necesita de 2 words, es decir, el GOTO + NOP ... mira lo que encontre en el programmers reference, (DS70157C-page 5-122):
Syntax: {label:} GOTO Expr
Operands: Expr may be label or expression (but not a literal).
Expr is resolved by the linker to a lit23, where lit23 ∈ [0 ... 8388606].
Operation: lit23 → PC
NOP → Instruction Register
La primera palabra es el GOTO .. la segunda el NOP.
Mi hipotesis del porque, seria que el GOTO lee de memoria la direccion a donde se debe dar el salto, pero el PC está cargado con la siguiente direccion (que seria el NOP) ahora es hasta el NOP que la direccion de salto se actualiza en el PC. Como diria el chapulin colorado ... "bueno, la idea es esa!"