. where do you see I'm using a bootloader?
my bad, i was thinking back to bootloader issues i had with a 87j11 and 128k relocations going bad
with similar results.

a quick look at a lst file of your code shows a fair bit of this going on for the "DEC" section of your code
the upper portion of the hserout2j label address is ignored.



Code:
                          M     endif01EE4E 6A1C               M         clrf    (R2)   + 2
01EE50 6A1D               M         clrf    (R2)   + 3
                      00270         HSEROUT2DEC?    
                          M         MOVE?CW HSEROUT2J, R8     /// hserout2j  is a  more than a word long when >64k
                          M     ifdef USE_LINKER
                          M         CHK?RP  R8
                          M         movlw   low (HSEROUT2J)
                          M         movwf   R8
                          M         movlw   high (HSEROUT2J)
                          M         movwf   (R8)   + 1


hserout2j being a label

Code:
HSEROUT2                          0001EC06HSEROUT2?C                        
HSEROUT2COUNT?C                   
HSEROUT2DEC?                      
HSEROUT2J                         0001EC04
HSEROUT2J_USED                    00000001
HSEROUT2NUM?W                     
HSEROUT2_USED                     00000001
HSER_BAUD                         00000960
HSER_BITS                         00000008