Quello degli z-index "sballati" è un bug di IE, anche se nel tuo caso ci sono diversi errori nel codice, quindi il problema non è imputabile direttamente al browser. Puoi eliminare le dichiarazioni di z-index nelle regole dei <div> #menu e #middle...non servono. z-index ha effetto solo quando un box è posizionato in modo relativo, fisso o assoluto...mentre quei box sono posizionati normalmente, ovvero in modo statico. Prova a impostare #middle con position: relative e z-index: 1 e ad eliminare z-index: 0 in #menu. In questo modo, #middle continuerà ad influire sul layout della pagina, come se fosse posizionato in modo statico, ma sarà su un "piano" superiore rispetto a #menu. Quindi, tutti i box che #middle contiene avranno z-index sempre più alto di tutti i box che sono eventualmente contenuti in #menu (e di #menu stesso).

Allo stesso modo, hai impostato z-index per i box contenuti nel <div> #middle, ma senza posizionarli. Se vuoi che lo z-index abbia effetto su di essi, devi per lo meno dichiararli position: relative.

Il valore 0 per z-index è quello di default di tutti i box non posizionati (ovvero posizionati in modo statico). Tuttavia per questi box non ha effetto impostare uno z-index diverso, proprio perché sono statici.