Bueno aparentemente lo solucione, termine leyendo el codigo de las librerias de arduino y creo que llegue a una conclusion provisoria que ademas considero que puede ayudar en otros aspectos a otras personas.
Antes que nada aclaro que tengo el compilador de arduino "arduino-0019".
La funcion delay() y millis() estan implementadas en un archivo llamado wiring_private.h, en este archivo tambien esta implementada una funcion llamada init() en donde estan inicializado los registros del micro y es la primera funcion en ser llamada en la funcion main() (archivo main.cpp).
En la funcion init se inicializa entre otras cosas el TIMER0 con su respectiva interrupcion por desbordamiento. Cada vez que desborda ingresa al vector de interrupciones y suma la cantidad de tiempo y veces que ingresa (por decirlo de alguna manera).
La funcion millis() cuando es llamada salva el registro SREG para recuperarlo justo antes de salir de la funcion, luego se deshabilitan las interrupciones globales ( cli() ) y luego carga el valor del tiempo en una variable local para que la funcion devuelva el tiempo. Los calculos los hace con la interrupcion del TIEMER0.
La funcion delay() usa a su vez adentro otra funcion llamada micros() (tambien implementada en el mismo archivo) y este tambien internamente deshabilita las interrupciones globales ( cli() ), salva SREG y lo recupera antes de salir. Tambien utiliza la interrupcion del TIMER0.
Por otro lado segun el datasheet dice que las interrupciones globales estan gobernados por el bit I del registro SREG y que este bit es borrado por hardware cuando ingresa a una interrupcion y se reestablece cuando sale de la interrupcion. En este momento si esto es asi, se me ocurre, no se puede concatenar interrupciones, sin habilitar este bit apenas se ingresa en una interrupcion cualquiera sea.
Ahora la solucion parcial o definitiva, no lo se, puesto que recien estoy empezando con arduino y no soy experto.
Con todo lo que habia leido anteriormente se me ocurrieron dos posibles problemas:
----> 1 ) alguna de las funciones, millis() o delay() tenian problemas para habilitar las interrupciones globales
----> 2 ) cuando ingresa al vector de interrupciones del CAD se deshabilitan las interrupciones globales
por el momento la solucion parcial o definitiva es apenas entro al vector de interrupciones del CAD habilitar las funciones globales con sei(), esto es:
ISR(ADC_vect)
{
sei();
.
.
.
}