Hola, con un vistazo al código, donde declaras dos puertos serie RS232, y otro vistazo al esquema en proteus, saco esta conclusión.
En el diagrama deberias separar las lineas de comunicación, al estar unidas ambos puertos reciben el mismo dato, y provocan dos interrupciones a la vez, la segunda es la que carga el dato, por eso parece que se perdieran los mensajes de uno de los arduinos.
Cambia eso y prueba nuevamente.
Es probable que haya mas problemas, pero ese problema de lineas es el mayor ahora.
Si no mejora seguimos analizando.
Como consejo, nunca ataques dos problemas a la vez, o no sabras cual fue la solución.
Saludos y comenta si dio ayuda, por favor.
Según la imagen, el único Arduino que envía datos (Transmisor) es el ARDUINO 2, mientras que el PIC y el ARDUINO (Consola) son receptores.
En el lado del PIC, son dos puertos emulados (RD0 y RD1), por lo que interrupción por recepción RS232, me parece que no puede existir, por no existir el periférico y es por eso que recurre a kbhit para detectar si el pin cambia de estado, es decir si está empezando a recibir una trama de datos.
Luego, la primera función fgets, me parece que crea un lazo en esa parte del código hasta obtener todos los bits de la trama que está arribando.
Cuando se ejecuta la segunda función fgets, ya no hay datos que leer, y me parece que ese es el problema. Tal vez a lo mucho lee los últimos bits. (Bit 8 y bit de parada)
Tal vez la manera que está haciendo el código, las funciones que ocupa y la emulación de un periférico no son útiles para crear un proceso multitarea.
Otra cosa que tal vez debería considerar en un circuito verdadero es las impedancias de los terminales de recepción (PIC y ARDUINO 1) al unirse a un sólo terminal, la impedancia sería menor por conectarse ambas en paralelo, lo cual implica un mayor consumo de corriente del terminal TX del ARDUINO 2. Pero puede que sea despreciable esta impedancia en paralelo.