Actualizo. He probado el código de Picuino también con MPLAB SIM, del cual me fío bastante más que de Proteus, y también se queda enganchado en el mismo punto.
Intentando ver cómo funciona el putc(), este es el código ASM que genera. No entiendo ASM, pero no veo ninguna escritura en el registro TXREG (0xFAD) en todo ese trozo de código, así que no sé cómo furula, pero creo que ahí está la clave.
0122 9C94 BCF 0xf94, 0x6, ACCESS
0124 9C8B BCF 0xf8b, 0x6, ACCESS
0126 0E08 MOVLW 0x8
0128 6E01 MOVWF 0x1, ACCESS
012A D000 BRA 0x12c
012C 0000 NOP
012E 8E01 BSF 0x1, 0x7, ACCESS
0130 D00E BRA 0x14e
0132 9E01 BCF 0x1, 0x7, ACCESS
0134 3244 RRCF 0x44, F, ACCESS
0136 B0D8 BTFSC 0xfd8, 0, ACCESS
0138 8C8B BSF 0xf8b, 0x6, ACCESS
013A A0D8 BTFSS 0xfd8, 0, ACCESS
013C 9C8B BCF 0xf8b, 0x6, ACCESS
013E 8C01 BSF 0x1, 0x6, ACCESS
0140 D006 BRA 0x14e
0142 9C01 BCF 0x1, 0x6, ACCESS
0144 2E01 DECFSZ 0x1, F, ACCESS
0146 D7F6 BRA 0x134
0148 D000 BRA 0x14a
014A 0000 NOP
014C 8C8B BSF 0xf8b, 0x6, ACCESS
014E 0E3F MOVLW 0x3f
0150 6EE9 MOVWF 0xfe9, ACCESS
0152 2EE9 DECFSZ 0xfe9, F, ACCESS
0154 D7FE BRA 0x152
0156 0000 NOP
0158 BE01 BTFSC 0x1, 0x7, ACCESS
015A D7EB BRA 0x132
015C BC01 BTFSC 0x1, 0x6, ACCESS
015E D7F1 BRA 0x142
0160 0012 RETURN 0