En el paso del latín al español hubo debilitamiento importante de las consonantes oclusivas sonoras, con varios episodios. En primer lugar, las oclusivas sonoras /b d ɡ/ pasaron a ser fricativas, [β ð ɣ], entre vocales y en ciertos otros contextos (esto sigue siendo válido hoy). En segundo lugar, ya debilitadas de esta manera, muchas de estas fricativas sordas fueron elididas completamente entre vocales. La dental [ð] cae casi en todos los casos, la velar [ɣ] en unos cuantos, y la labial [β] en unos pocos, unos de los cuales es precisamente la conjugación del verbo habēre.
Además de este proceso ocurría que la vocal /e/ no acentuada, en ciertos contextos, se transformaba en semivocal, pasaba a ser /i̯/ (una i corta) y después /j/ (yod, una aproximante palatal). Esta yod aparecía en las conjugaciones de muchos verbos y a veces reemplazaba a la consonante anterior, cuando ésta era una de las perdidas por el proceso explicado antes. Esto evitaba, además, que se produjera un hiato entre dos vocales. Por ejemplo, la primera persona del singular del verbo vedēre "ver", era videō, que evolucionó a algo así como [beði̯o] > [bei̯o] > [bejo], escrito veyo.
Al final la yod comenzó a extenderse a otras formas de los verbos, donde no era resultado del proceso de semivocalización de una /i/ o una /e/ sino simplemente un artificio para romper el hiato entre vocales, y así hay registrados infinitivos como cayer, creyer, oyir, rayer, reyir, veyer. Estos fueron luego devueltos a sus formas regulares, aunque algunas de sus conjugaciones sufrieron otros cambios (como la inserción de una /g/ epentética en la primera persona a la que se refería otra pregunta).
Como ya se dijo, la /b/ intervocálica en general no se perdió como la /d/, pero hubo excepciones, y una de ellas fue el verbo "haber" (escrito muchas veces haver o aver), posiblemente porque era de uso muy frecuente. Las palabras muy usadas tienden, en todas las lenguas, a ser acortadas y a preservar irregularidades (las irregularidades pueden contribuir, incluso, a que esas formas abreviadas sean distinguibles unas de otras). Desde el momento en que "haber" pasó a usarse como auxiliar para los tiempos compuestos se volvió omnipresente y las formas regulares se fueron erosionando.
La primera persona singular del presente de habēre era habeō, que dio [aβi̯o] y luego, con la caída de la fricativa labial, [ai̯o]. Las otras formas del singular, habēs y habet, dieron [aes] y [at] luego de elidir la fricativa. Sólo las formas de 1era. y 2da. pl., habēmus y habētis, conservaron alternativas largas, dando [aβemos]/[emos] y [aβei̯s]/[ei̯s]; la 3era. pl. habent se simplificó drásticamente [aβent] > [ant]. Estas formas se simplificaron todavía más de las maneras habituales: [aes] se acortó a [as] y [at] y [ant] perdieron la oclusiva final.
Lo único realmente radical que ocurrió después fue que la 1era. sing. perdió de sopetón la /o/ final; así [ai̯o] pasó a [ai̯], que por simplificación regular de los diptongos pasó a [e] (hoy escrito he).
Al final quedamos con la conjugación actual, con la única rareza de que para la 1era. pl. conservamos las alternativas habemos y hemos, y en la 2da. pl. quedó la forma larga habéis.
La forma impersonal hay tiene también una historia curiosa. Una forma de decir en latín que "había algo en un lugar" era emplear la locución habet ibi, que significaba literalmente "tiene allí". Ese ibi es el origen del sonido [i̯] que hoy escribimos como y en hay. Es también el origen de la partícula y en francés, que aparece en il y a (compárese Il a une voiture "Él tiene un automóvil" vs. Il y a une voiture là "Hay un automóvil allá"). Algo similar ocurre en inglés, donde el "haber algo en un lugar" se expresa usando el demostrativo there más el verbo to be, que funciona como auxiliar.
Fuente: Del latín al español. I. Fonología y morfología históricas de la lengua española, de Paul M. Lloyd.