Периодически не срабатывает setTimeout — в чём может быть проблема?
setTimeout то скорей всего работает, а вот то, что происходит внутри функции, скорей всего не всегда работает как ожидается. Простой console.log внутри setTimeout покажет, что она работает.

Никаких приоритетов у него нет
Если действительно сам алгоритм правильный, и всё ломается из-за каких-то сторонних эффектов, то всё уже сложнее. Если например вы считаете, что сторонние скрипты сбрасывают таймауты, то можно попробовать декорировать clear* и посмотреть действительно ли какой-то скрипт их вызывает для массового сброса:

(() => {
    [ 'clearInterval', 'clearTimeout' ].forEach(method_name => {
        const original_method = window[ method_name ];
        window[ method_name ] = function() {
            console.log(`method ${ method_name } is called with arguments:`, arguments)
            return original_method.apply(this, arguments)
        }
    })
})()