The runtime will start to throttle the framerate back for longer periods when it sees that the application is consistently missing frames, so you get those big red chunks of 20 fps, even though the actual frame time varies inside it.
It’s hard to tell exactly how the frame timing varies without going through every frame, since the Unreal profiler includes the waiting time. I’m not sure what profiling tools are available for Oculus, but the runtime should have some sort of built-in ones for graphing the actual frame times as the runtime sees it.