Процедура обработки прерывания начинает работать в момент прихода импульса на вход /INT процессора. В Spectrum'е импульсы на этот вход поступают примерно 50 раз в секунду, а точнее с частотой обновления экрана. У разных клонов чуть разная частота обновления и геометрия экрана и скорость работы процессора.
Это правильное предположение. В момент прихода импульса прерывания как будто бы выполняется команда call, при этом на стек попадает адрес возврата. Обработчик прерывания завергается командой RET, адрес возвра снимается о стека и выполнение продолжается со следующей команды - как бы происходит аппаратный вызов подпрограммы. обработчику прерывания ничего не мешает подменить адрес возврата на стеке и "продолжить" выполнять программу с любого места.
На 100% не подскажу, потому что, повторюсь, я не дебажил этот код. Если обработчик подменяет адрес возврата, то достиженеи команды RST 0 зависит от того, успело ли прийти прерывание до этой самой RST 0. Если успело, то обработчик подменяет адрес, и выполнение обходит RST 0. Если не успело - RST 0 выполняется и сбрасывает машину.
От чего зависит успело или не успело? Скорее всего от модели эмулируемой машины. У ориигнального ZX Spectrum и, например, у ZS Scorpion за время между импульсами прерывания "тикает" 69888 тактов, у Pentagon128 - 71680 тактов. Соответственно, между прерываниями успевает выполниться и разное количество команд, Пентагон может "успеть" выполнить RST 0 до прихода прерывания, подменяющего адрес исполнения, а оригинал - нет.