Salut,
c'est normal, et ça n'arrive peut-être pas toujours. c'est dû au rebond. Il y a un registre (une variable permanente dans le µc) nommé EIFR qui enregistre les évennements des interruptions, même s'il n'y a pas d'interruption déclarée. S'il enregistre une interruption après un detachInterrupt(), alors quand tu feras un attachInterrupt(), l'interruption ser exécutée puisque la variable indique qu'il y a eu un évennement.
Pour palier à celà, tu as deux solutions. Soit intervenir dans le fichier WInterrupts.c du core arduino et modifier la fonction attachInterrup(), mais il faut vérifier que ça puisse marcher avec TOUS les avr (ils n'ont pas tous la même définition de registres). L'autre solution plus simple est de rajouter une ligne dans ton code juste avant attachInterrupt() :
if (EIFR & (1 << Num_int)) EIFR |= 1 << Num_int; // désactive le dernier enregistrement d'interruption si besoin
attachInterrupt(Num_int, ma_fonction, mon_mode);
en gros, si EIFR indique qu'il a enregistré une interruption, on efface l'enregistrement correspondant. (*) Ca peut parraître zarbi, mais dans les registres flags, on efface un bit en écrivant un 1 dedans... cherchez pas, c'est comme ça 
Attention cependant, car ça ne marchera pas forcément pour leonardo, et peut-être même la MEGA, je me souviens avoir eu un souci avec les numéros d'int qui étaient inversés dans le core (bravo le team). C'est pour ça qu'il est plus efficace de rajouter cette ligne dans le core directement, mais en lisant le datasheet de chaque proc concerné en même temps (page 73 pour les ATMEGA48-328 par exemple) pour ne pas aller modifier n'importequoi..
(*) : d'ailleurs, je ne suis même pas sûr et tout dépend du compilateur, car si EIFR = b00000011 par exemple (il a enregistré les deux int 0 et 1) et que le compilateur fait
R24 = EIFR; // donc R24 = 3
R24 |= 1; // pour effacer l'int 0, R24 = 3
EIFR = R24; // On écrit un 1 dans INT0 et INT1, donc on efface les deux au lieu de seulement INT0
il faut peut-être utiliser SBI
if(SBIS(EIFR, Num_int)) SBI(EIFR, Num_int); // mais je ne sais pas si ces instructions sont directement accessibles... sinon, le faire en ASM
et là, je m'en remets à ceux qui ont déjà essayé... 