Yo te recomendaría que emules el primer paso que hace el bootloader RS232.
Estoy asumiendo que es lo mismo, esto es que para forzar al dispositivo a entrar en ese modo, envías un comando denominado brake, que básicamente, consiste en mantener la línea de recepción RS232, en bajo (0V), por un tiempo mucho más largo que lo que duraría un byte.
¿Qué se consigue con esto?
Al mantener la línea RX en bajo, produces una excepción en el UART (un error y una interrupción), al ser atendida por el CPU, verifica que la línea RX en realidad esté en cero lógico, si es así, se reinicia al microcontrolador, caso contrario, sólo limpia la bandera de interrupción y error, y retorna a donde se quedó.
Al reiniciarse, lo primero que se ejecuta, es el bootloader, que también verifica si esa línea, la RX, está en bajo, si estuviera en alto, modifica el contador de programa para que salte a la app de usuario.
Caso contrario, permanece en modo bootloader.
SI ese comando break, es muy corto de tiempo, es posible que nunca entre o se quede en el modo bootloader.
Error suele darse por una velocidad incorrecta de comunicación serial, o se ha modificado el número de veces que se manda ese comando break (la versión del bootloader o software no son contemporáneos)
El software a veces no logran emular un comando break adecuadamente, sobre todo en un convertidor USB a serial, y lo que hacen es enviar muchos ceros (0x00) para entrar en ese modo, pero puedan que sean muy pocos.
Por eso deberías poner el terminal RX del microcontrolador a 0 voltios, para ver si entra en ese modo.
Nuevamente, así es como funciona el bootloader RS232 de MCHP, pienso que esa parte es igual, pero deberías comprobar viendo el código de como entra a ese cómo (app de usuario y bootloader)