Lasse mal folgendes aus dem Datenblatt in deinen Code einfließen, und probiere es dann nochmal:
After a change of the edge, the input capture flag (ICF1) must be cleared by software (writing a logical one to the I/O bit location).
Außerdem würde ich ICR1 so früh wie möglich auslesen (insbesondere noch vor der Flankenänderung), also:
Code:
unsigned int capture = ICR1;
gleich als allererste Zeile in der ISR, und dann mit capture weiterarbeiten.