Timer2 period match interrupt on dsPIC33F not working
I just looked at the code I wrote a while ago to set up timer 2 for a periodic interrupt of 1 ms for a PIC24F (essentially same timer hardware as dsPIC33F), and it looks like so:

#define CPU_CLK_RATE 32000000L
#define PERIPH_CLOCK_RATE (CPU_CLK_RATE/2L)

#define TIMER_2_RATE 1000L
#define TIMER_2_PRE  64L        // clock rate is (32000000/2)/64 = 250 KHz
#define TIMER_2_MATCH (PERIPH_CLOCK_RATE/(TIMER_2_RATE * TIMER_2_PRE))  

    T2CON = 0; // set control register to defaults

    T2CONbits.TSIDL = 1;  // discontinue when idle
    T2CONbits.TCKPS1 = 1; // prescaler of 64
    T2CONbits.TCKPS0 = 0; // prescaler of 64
    T2CONbits.T32 = 0;    // 16 bit timer
    T2CONbits.TCS = 0;    // FOSC/2 (32Mhz/2)
    TMR2 = 0-TIMER_2_MATCH*19;  // 20 millisecond delay before starting
    PR2 = TIMER_2_MATCH; 

    SetPriorityIntT2(TIMER2_INTERRUPT_PRIORITY); // set to very high priority
    EnableIntT2; // enable interrupts

    T2CONbits.TON = 1


Very similar to yours, except I pre-initialized TMR2 so there would be a delay before the first interrupt. Don't know if that would help in your case or not, but you might try it.