Thanks for the responses. This all came about as a response to this thread:
https://forum.arduino.cc/index.php?topic=600484.0
I thought it might be useful to have a millis alternative that really incremented at 1ms intervals, with no catch-up extra increment. Since this would be at the cost of at least one of the PWM functions for the pins that use timer0 for that (5 and 6, I believe), it wouldn't be for general use, but rather for those occasions when the periodic millis correction was causing problems, or at least to see if that really was the problem.
I had already done the part about disabling the existing interrupt, and enabling a new one that triggered at the compare value of 249, producing an interrupt every 250 timer0 clocks, which is exactly 1ms. But I ended up putting all my loop() code into the ISR, leaving only the sleep functions in loop(), so I didn't need to rewrite the millis ISR. But for this I wanted to completed that process.
In wiring.c, MILLIS_INC is the amount by which the millis count is incremented on each interrupt, subject to further increment if it's time for a catch-up. It is the number of milliseconds between interrupts, and is calculated via all the #defines as the integer portion of:
(64 * 256) / (F_CPU / 1000).
In my version it will be:
(64 * 250) / (F_CPU / 1000).
64 is the I/O clock prescaler, and 256 is the timer0 overflow count.
In both cases, the value is 1 for a 16 MHz clock, but in my version there is no remainder requiring a catch-up.
What's odd to me about this is that it appears to mean that for an 8 MHz Pro Mini, for example, MILLIS_INC is 2. The interrupt takes place every two milliseconds, and millis is incremented by 2 each time, or by 3 for a catch-up. That would mean that the millis() count only increases by 2 or 3, never by just 1. I just didn't know that was the case.
Anyway, my test code is posted in the other thread, except that I don't have a working Arduino to test it on. So all I know at this point is that it compiles ok.