My post above had a typo. The 2nd example command should have used -P instead of -p. The two examples showing the -p and -P handling should have been:

/test_timer_P 7 20 -p
/test_timer_P 7 25 -P

The condensed behaviors are shown below. First is for -p intervals. Due to being paused for 10 seconds, the .secs is zero when it resumes at T+22 secs, so it executes immediately. Since this missed the original T+15 target time for the 1st execution, the timer tries to adjust the 2nd execution to be at T+30 seconds after launch, so the 2nd interval is 8.

Code:
//echo -a $asctime launch | timerx1 4 15 echo 4 -a $!asctime reps $!timer(x1).reps secs $!timer(x1).secs | .timerx2 1 12 .timerx1 -p | .timerx3 1 22 timerx1 -r | .timerx?



Next is for -P intervals. The 1st .rep correctly triggers 16 seconds after launch due to being paused for 1 second. However the 2nd interval executes after a 1 sec delay that's probably due to similar calculations attempted by -p's 2nd interval. The 3rd and all later intervals use a delay taken from the .secs=2 value at the time it was resumed. This causes the 4 .reps to execute in 24 seconds instead of 60.

Code:
//echo -a $asctime launch | timerx1 4 15 echo 4 -a $!asctime reps $!timer(x1).reps secs $!timer(x1).secs | .timerx2 1 12 .timerx1 -P | .timerx3 1 13 timerx1 -r | .timerx?



The bug where timerX2 was seeing info about timerX1 after X1 was halted isn't related to -p or -P. It turns out that the X1 and X2 timers were being executed during the same clock tick, so this is the same issue reported here in this thread:

https://forums.mirc.com/ubbthreads.php/topics/261772/$timer()_returning_info_about_#Post261772