Non so perche` con il tuo scambio funzioni.

Pero` ho notato che usi dei float, inseriti dentro un blocco non-float. Inoltre l'innestamento dei blocchi di tipo #cont ti serve per sistemare gli sfondi.
Questo significa che il blocco non-float si chiude prima che finiscano i blocchi float, e questo ritengo ti dia il problema che segnali.

Il tutto si corregge mediante un clear.
Esempio1:
codice:
<div id="cont2">
  <div id="col1"> 

 COLONNA 1 COLONNA 1 </p> </div>
  <div id="col2"> 

 Colonna 2 colonna 2 ... colonna 2 colonna 2 colonna 2 </p> </div>
  <div id="col3"> 

 colonna 3 colonna 3 colonna 3 colonna 3 colonna 3 </p> </div> 
  <div id="chiusura">&amp;nbsp;</div>
</div>

CSS:
#cont2 {
  /* qui lo sfondo (false colonne) */
}
#col1, #col2, #col3 {
  width: ...;
  float: left;
}
#chiusura {
  width: 100%;
  height: 1px;
  font-size: 0;    /* per IE6 */
  clear: left;
}
Esempio2:
codice:
<div id="cont2">
  <div id="col1"> 

 COLONNA 1 COLONNA 1 </p> </div>
  <div id="col2"> 

 Colonna 2 colonna 2 ... colonna 2 colonna 2 colonna 2 </p> </div>
  <div id="col3"> 

 colonna 3 colonna 3 colonna 3 colonna 3 colonna 3 </p> </div> 
</div>

CSS:
#cont2 {
  /* qui lo sfondo (false colonne) */
}
#cont2:after {
  display: block; 
  visibility: hidden;
  content: "."; 
  height: 0; 
  clear: both;
}

#col1, #col2, #col3 {
  width: ...;
  float: left;
}