What I would do is try to grab a stack sample in that half second when it's frozen. This would require an alarm clock timer set to go off some small time in the future, like 100ms. Then in some loop, like the frame display loop, that normally takes less than 100ms to repeat, keep resetting the timer. That way, it will act as a watchdog that barks if you don't keep petting it.
Then, stick a breakpoint in the timer interrupt handler. When it gets there, you know you're in the bad slice of time. Then just display the call stack, and it should show you what the problem is.
You might have to repeat the process a few times.