HI all,
I moved this to a 16F627 and made the code as straight as I could.

The problem is much like it has been for a while: The direction signal is erratic and can be tricked by interaction with the other encoder.

Any thoughts would be appreciated.
Code:
'****************************************************************
'*  Notes   :  16F627@20mhz, HS_OSC                             *
'*          : PBP 2.50c, MPASM: 5.11,                           
' 1) Quadrature encoder reading direction and speed of mechanical slide.
' 2) Motor (servo) driven in ONE direction of slide movement, 
'    not driven for other direction. Pulse & Direction drive LOW.
' 3) Manual Encoder to drive servo either direction manually.
'                        16F627
'          ----------------u-----------------
'        -1|RA2/AN2/Vref            RA1/AN1 |18-   direction LEVEL output        
'        -2|RA3/AN3/CMP1            RA0/AN0 |17-   Step PULSE o/p, Active LOW      
'        -3|RA4/TOCKI/CMP2   RA7/OSC1/CLKIN |16-        
'        -4|RA5/MCLR/vpp    RA6/OSC2/CLKOUT |15-              
'        -5|-- VSS                    VDD++ |14-            
'        -6|RB0/INT           RB7/T1OSI/PGD |13-   Manual Encoder B input       
'        -7|RB1/RX/DT  RB6/T1OSCO/T1CKI/PGC |12-   Manual Encoder A input       
'        -8|RB2/TX/CK                   RB5 |11-   Travel encoder B  input      
'        -9|RB3/CCP1                RB4/PGM |10-   Travel encoder A  input        
'          ----------------------------------       

DEFINE OSC 20	
INCLUDE "AllDigital.pbp"
clear
P_out   var PORTA.0          ' Step PULSE output to motor, Active LOW
D_out   var PORTA.1          ' LEVEL output for direction  
syncM   var PORTA.2          ' output for testing timing 
syncI   var PORTA.3                            
Dir         VAR byte         ' Direction
EncOld      var byte
EncNew      var byte 
OPTION_REG = %00000000       ' Pull-up Enabled
TRISA = %00000000 
TRISB = %11110000
TravEnc  con %00110000
ManEnc   con %11000000 
P_out = 1                    ' start out HI. Moves on LOW pulse 
goto Main      
'********** Subs *************************** 
ManDrive:
       Dir = EncNew.7 ^ EncOld.6    ' XOR new L bit > Old Rt bit=Direction
       D_out = Dir                  ' set direction pin
       pauseus 2                    ' minimum 3.5uS for Gecko drive
       P_out = 0                    ' send drive pulse either dir
       pauseus 2
       P_out = 1                    ' reset drive pulse 
return     
TravDrive:
       D_out = 1                     ' set direction pin
       Dir = EncNew.5 ^ EncOld.4    ' XOR new L bit > Old Rt bit=Direction
       If DIR = 0 then                  ' end if travel DOWN
        P_out = 0                    ' send drive pulse retract only
        pauseus 2
        P_out = 1                    ' reset drive pulse
       endif  
return 
'******* MAIN *********************************************** 
Main:
      'TOGGLE syncM                  ' pulse to time Main loop
    EncNew = PORTB           ' get the new state of both encoders 
    if (EncNew & ManEnc) != (EncOld & ManEnc) then ' man not same? Drive Man  
      gosub ManDrive
      endif
    if (EncNew & travEnc) != (EncOld & TravEnc) then ' Trav not same? Drive Trav 
     GOSUB TravDrive
     endif     
    EncOld = EncNew          ' save the previous state of both encoders 
goto main        
end
Thanks
Mark