Timing problem with millis

I can't see right away why they get out of sync.

But the easiest way to do one thing twice as fast as the other is to have one timing section instead of two, and then within that section do the half fast thing only every other time. Do the fully fast thing every time.

You can use a simple counter for this

// every N milliseconds ... 
  static byte counter;

  counter++;
  if ((counter % 2) == 1) {  // number is odd?
     doHalfFastThing();
  }

  doFullyFastThing();

Since one will be done exactly twice as often, they cannot get out of sync unless the times are not just a factor of two different.

Which makes me curious again about why your code does. Get out of sync.

a7