Do you really need to handle PJSIP_EVENT_TIMER specially? I thought it would generate a 408 for you. And are you sure this is the only timer running on this transaction? (I don't know PJSIP well enough, but maybe another module could have set a timer on the transaction too for some reason of its own?).