Pues finalmente haciendo caso de vuestros consejos he conseguido que funcione.
Una vez más, parece que CCS tenía la culpa, ya que esto:
setup_low_volt_detect(LVD_45|LVD_TRIGGER_BELOW);
enable_interrupts(INT_HLVD);
no provocaba ningún cambio en el contenido del registro HLVDCON.
Así que he dejado la inicialización así:
Y ya por fin entra en la interrupción
Y he modificado la interrupción para ver si le daría tiempo de guardar el contexto en la EEPROM, ¡y también funciona!. Cada vez que quito la alimentación, se incrementan en uno los 4 primeros bytes de la eeprom.
#int_HLVD
void BajoVoltaje(void)
{
disable_interrupts(GLOBAL);
write_eeprom(0,read_eeprom(0)+1);
write_eeprom(1,read_eeprom(1)+1);
write_eeprom(2,read_eeprom(2)+1);
write_eeprom(3,read_eeprom(3)+1);
while (1);
}