Wenn du ohne ISR arbeitest, dann wird irgendwann eine IRQ ausgelöst und du landest im Nirvana, genauer bei __bad_interrupt, was auf einen Soft-Reset angebildet wird.
Wenn du sei() benutzt, musst du ISRs für alle IRQs zur Verfügung stellen, die auftreten können (hier: SIG_INPUT_CAPTURE1).

Offenbar willst du aber erst mal ohne Interrupts arbeiten.
Dann wirf das sei() raus und lass erst mal die Finger von TIMSK

Bevor du auf das ICF1-Flag wartest, musst du es erst mal rücksetzen auf 0. Des geht, indem man eine 1 hinschreibt wie oben gesagt. Die anderen Flags werden nicht angefasst durch das 0-Schreiben.

TIFR = _BV(ICF1);

Danach wartest du:

while (!(TIFR & _BV(ICF1))) // Flag==0 --> *schnarch*
...

Dann wirst du die Flanke umschalten wollen, falls du nicht auf beide Flanken konfiguriert hast.
Nach dem Flanken-Umschalt und vor dem nächsten Warten: wieder ICF1 resetten.