La explicación (o la que yo puedo dar con mis palabras) es que al estar "flotados" los divs internos, estos quedan fuera del flujo normal del documento. Al estar "fuera de flujo", el div contenedor no se da cuenta que están allí y éste termina donde termine su propio contenido u otro contenido con la propiedad clear establecida.
Cita: IE si hace bien lo que necesito
El comportamiento normal es el que te muestra Firefox. El de IE es erróneo :)