Hola umov,
leyendo tu codigo, hay un par de cosas que a mi parecer se prestan a problemas.
Te las detallo.
[***]No encontre la directiva #use delay(clock=48000000), sin esta directiva, el compilador no conocera a que frecuencia esta funcionando el micro, y podria generar mal el codigo para las funciones de retardos como delay_ms y delay_us
Te recomiendo que la agregues.
[***]Cuando configuras el ADC, escribes setup_adc_ports(All_ANALOG).
Y si te fijas en el archivo de cabecera 18F4550.h podes notar que ALL_ANALOGS significa mucho =)
#define ALL_ANALOG 0x00 // A0 A1 A2 A3 A5 E0 E1 E2 B2 B3 B1 B4 B0
Es decir que en la lista de pines configurados como entrada analogica son todos esos, y el pin E2 esta en dicha lista, lo que podria crear conflictos con el hecho de que en la interrupcion #int_rtcc lo usas como salida

Ademas, solo usas el canal 0 como entrada analogica, set_adc_channel (0), es decir el pin RA0/AN0, por lo que te recomiendo que cambies la configuracion del ADC de esto:
setup_adc_ports(All_ANALOG);
a esto:
setup_adc_ports(AN0);
y eso resolveria el conflicto de si el pin E2 es entrada analogica o salida digital

[***]Al final del bucle principal agregas un retardo de 100ms, delay_ms(100), quiza se te escapo, pero no te recomiendo que lo pongas ya que no tiene sentido, pues lo unico que produce es una demora en la respuesta del pic los posibles comandos provenientes del USB
Otra cosa que podria traerte problemas es la tasa con la que le solicitas al pic que te envie la temperatura medida.
Tene en cuenta que si pides mas rapido de lo que el pic obtiene y procesa, lo unico que logras es saturar el canal, y por lo consiguiente, todo paquete que le envies al pic se va a descartar debido a que este no puede procesarlo =)
Te recomiendo una tasa mayor a 200ms ( el timer que usaste en java, que haga un scheduleAtFixedRate(Tarea,0,200) )
Bueno, no encontre mas que eso. Una simulacion para probar me vendria al pelo jeje

Espero que esto solucione los problemas

Saludos!