SOLUCIONADO.
Triby estaba en lo cierto, la supuesta "pérdida" de datos, que no era pérdida porque el control seguía conteniendo el valor, era debida al float.
Lo he resuelto de esta manera:
Código:
#Main form {padding:0; float:none; margin-bottom:0; width:auto;}
#Main form label {width:auto; float:left; background:#EEE; padding:0;}
El primero con float:none y width:auto (antes no tenía width).
El segundo con float:left (para que se vea como yo quiero) y width:auto, para que coja toda la anchura del td.
Consejo para gente que le pase algo parecido en el futuro: Probad bien las combinaciones de float/clear y usadlos
siempre acompañados de
width, sino el navegador no lo interpretará.
Muchísimas gracias, Triby. Te debo una.