Interrupt-on-Change occurs twice on PIC16F1825
According to Page 92 of the PIC16F1825 Datasheet:


  Note 1: The IOCIF Flag bit is read-only and cleared when all the Interrupt-on-Change flags in the IOCxF register have been cleared by software


So basically when you do this in your code:

INTCONbits.IOCIF = 0;


It actually does nothing at all - the interrupt flag is not cleared because that bit is read-only.

In order to clear the interrupt flag for Interrupt-on-Change sources, you need to write to the IOCAF register to clear the flags you want. If you want to clear them all, you can do:

IOCAF = 0x0;


If you only want to clear certain bits, like IOCAF4 in your case, you can do:

IOCAFbits.IOCAF4 = 0;