Hola:
Es obvio que no se ejecute el IF THEN pues el bucle espera a que termine la condicion para salir, es decir:
For i=0 to 10
portb=%00000110:delayns 20
portb=%00000101:delayns 20 Aqui aveces si es reconocido el pulsador o la comparación IF Then
portb=%00000110:delayns 20 y la mayoria de las vece nada
Next
son 11 iteraciones que realiza ese bucle, para los siguientes valores de i: 0,1,2,3,4,5,6,7,8,9 y 10, por lo tanto, como tienes tres retardos de 20 ms, cada iteración tarda aproximadamente 60 ms, eso multiplicado por las 11 iteraciones, son 660ms ese tiempo se tarda en el bucle que está mencionado en la parte de arriba.
Es mejor que expliques que es lo que quieres hacer, si me adelanto un poco y a juzgar por el nombre de tus subrrutinas, parecería que quieres hacer algo así como comandar motores, para ello los delays los veo demás, así como los bucles.