TMR1 generates an interrupt when it overflows from $FFFF to $0000.
If your clock is 4MHz and TMR1 prescaler is 1:1 then TMR1 will "tick" at 1MHz, ie it'll increment one count every us.
If you just let it freerun it'll interrupt once every 65536us or 0.065536s or 15.25Hz. Since you're toggling the LED in your ISR you get ~7.6Hz.

If you want it to interrupt at 400Hz (2500us) you need preload TMR1 to 65536-2500=63036 so that it takes 2500 "ticks" instead of 65536 before it interrupts. And yes, you need to do it every time or it will just start over from 0. If you want to be accurate you ADD the preload value TO the current value of TMR1 as that will account for any interrupt latency. If you want to be even more accurate you need to add a couple of counts TO the preload value since it actually takes some time to execute the instructions that preloads the timer while it's stopped.
Code:
Temp VAR WORD
ToggleLED1:
  T1CON.0 = 0
  Temp.HighWord = TMR1H   ' Get current value of TMR1
  Temp.LowWord = TMR1L
  Temp = Temp + Preload     ' Add the preload, this will account for the interrupt latency
  T1CON.0 = 1                ' Restart TMR1
TOGGEL LED1
@ INT_RETURN
If a periodic interrupt is what you want then TMR2 might be a better option. It counts up from 0 and interrupts when its value equals PR2 and then automatically starts over from 0. No need for manually preloading but it's only 8 bits wide with a limited prescaler.

/Henrik.