I think I understand the issue that you are running into.
First of all, grab/ungrab locks out all sequences that are not a sub-sequence of the sequence that has the grab. When you call start with the default value for the second argument, i.e., parent_sequence, the sub-sequence is treated as a root sequence and therefore is prevented from execution until ungrab is called.
This is another advantage of using the `ovm_do macros as setting of parent_sequence, p_sequencer and reseeding of sequence is handled by one call. Also ovm_do calls seq.randomize() by default so if there are any rand variables in the sequences like delays for reads/writes it will create a more interesting stimulus for the DUT.
I'd re-write your sequence as:
// interrupt main sequence body.
Hope this helps.