Cargamos el TMR1 con preescaler 1/8 y configuramos el CCP en modo captura (esto lo entiendo pero no del todo)
Veamos los registros...
CCP1CON
bit 3-0 CCP1M3:CCP1M0: CCPx Mode Select bits
1000 = Compare mode, set output on match (CCP1IF bit is set)
1001 = Compare mode, clear output on match (CCP1IF bit is set)
1010 = Compare mode, generate software interrupt on match (CCP1IF bit is set, CCP1 pin is unaffected)
1011 =
Compare mode, trigger special event (CCP1IF bit is set; CCP1 resets TMR1)
No es modo captura, esta en el modo comparar. Ahi estan todas las opciones para el modo comparar, observas que yo seleccione la ultima en el que se activa la interrupcion ( CCP1IF se pone a 1 ) y el modulo me resetea TMR1 solo.
Los 2 primeros modos utilizan un pin de salida y el tercero solo genera la interrupcion sin cambios en la salida o en el TMR1.
Esta es la imagen del modulo:

Si observas lo que esta en CCPR1H:CCPR1L se compara con lo del TMR1H:TMR1L, lo de los registros CCPR1H y L es fijo, y lo unico que varia es lo del timer 1. Cuando presenta una coincidencia, ambos registros iguales, se activa el flag CCP1IF y en nuestro caso resetea el TMR1 por el modo que seleccionamos antes.
Cargamos el tmr1 con el valor de 16 bits TMR1H y TMR1L, luego limpiamos ambos TMR1 y por último activamos el T1CON,TMR1ON
En parte correcto, lo que cargas es el valor en CCPR1H y L y pones a 0 TMR1, asi cuando la cuenta en TMR1 es igual a la del CCP ocurre lo que puse arriba, luego se habilita el Timer para que empieze a contar.
Para que entiendas otro poco, se cargo en CCPR1H y L el valor de 62500, o sea que para igualarlo el TMR1 necesita contar desde 0 a 62500, con preescaler 1/8 necesitaria de 62500*8 ciclos = 500000ciclos de reloj
Cada ciclo es de 1us ( 4 / 4Mhz ), entonces 500000 ciclos de 1us seria igual a 500000us o que es igual a 500ms o igual a 0.5s
Revisamos sin PI1 ha llegado al límite sino, repite. Si ha llegado desactivamos PIR1 y volvemos a limpiar TMR1H (no se porque lo limpiamos otra vez)
No me leiste antes, cuando simule el programa en el MPLAB X, me encontre que el modulo CCP solo ponia a 0 la parte baja del TMR1, es decir ponia a 0 TMR1L pero TMR1H no lo tocaba, entonces si iba en 0xF424 en ves de quedar 0x0000 me quedaba en 0xF400 . Puede haber sido un problema del simulador o que sea asi, por eso mismo yo luego de que se generase la interrupcion (si estan activas, o cuando se activa el flag CCP1IF ) borraba el TMR1H, asi nuevamente la cuenta comenzaba desde 0x0000 y no desde 0xF400 por que reinicio solo la parte baja a 00.
Y tambien otra correccion, no "desactivas" PIR1,CCP1IF. Solo estas "limpiando" el flag(bandera) que se activo, que en este caso es el CCP1IF y que se encuentra en el registro PIR1
Espero que esto te ayude a solucionar tus dudas.
Con respecto al programa tendrias solo 1 segundo por completo, ya que el Timer1 con 4Mhz solo alcanza para 0.5s, por eso mismo mi interrupcion tenia un "contador" para que ocurriera 2 veces.
Tu ejemplo hace que este 0.5s encendido y 0.5s apagado