Firstly I would ask if you KNOW that you aren't getting 'double' interrupts on any one edge (edge rate, noise induced)? You might turn on bit PFE for filtering on the pin (if available???).
Second concern is ALWAYS whether something else is 'holding off' interrupts on you for tens of microseconds. You might change 'global' interrupt disables into priority-level disables:
PUBLIC uint32_t _IntsDisableCount; // count of performed disables
#define DISABLE_INT() _IntsDisableCount++;\
__set_BASEPRI( 0x40L ); //All OTHER device interrupts on Level >=1, disable them
#define ENABLE_INT() if(--_IntsDisableCount==0) \
__set_BASEPRI( 0 ); //If we get back to 'base level', enable all interrupts
and put your 38KHz on a 'high' priority:
set_irq_priority(INT_PORTB-16, 0); //Highest priority, for timely handling
//Also makes this IRQ handler Uninterruptible.
For that to work, you also have to set "everybody else's priority" to two (or such).