Si te explicas, el problema que te paso es por el comportamiento greedy de la expresion regular. Trata modificando tus expresiones asi:
Código PHP:
$texto=eregi_replace('\[code\]([^\[]*)\[\/code\]',"<div>$codigo</div>",$texto);
Basicamente lo que se esta haciendo es hacer match de "cualquier cosa hasta un un left-bracket, a menos que este sea [/code]". Checalo y nos cuentas si te funciono (a mi si)