Почему console.log переменной в set.timeout «перевыполняет» действие?
Потому что ++
Постинкремент возвращает значение переменной до инкремента.
Когда secVal == 1000, условие истинно и вы заходите в него. Выставляете 1001-ый вызов timer = setTimeout(tick, 0);, вызываетесь, условие не срабатывает, а вот console.log(secVal); - да. Оно же за границами if-а.