I think the first version should work - but do so quite unreliably.
The reason: If the button being pressed happens to FIRST be checked in the debounce routine the code will be stuck there until the button is released and no action will be taken.
One would think that if you have played with this for some time it would at least sometimes be detected at the "correct" place before falling into the debounce though.

It would probably be a better idea to GOSUB the debounce routine after the SEROUT2 statement or simply:
Code:
  if (PORTB & 1) = 1 then 
    Serout2 PORTB.7, 16384+12, [144, 44, 127]    ' Rewind
     WHILE PORTB.1 : WEND
     PAUSE 10  ' Or whatever
  endif