Credo dipenda dal fatto che $sel_comuni_ok una volta impostata a "checked" non viene rinizializzata a NULL al inizio del while.
In teoria, se selezioni solo il secondo comune, dovresti avere spuntati il secondo e il terzo.
Tra l'altro il tuo codice ha alcuni punti oscuri per me (cos'è $comune_s ?)...non sarebbe più semplice fare così:
Codice PHP:
while ($row_comuni = mysql_fetch_array($sql_result)) {
$sel_comuni_ok = (isset($_POST['comuni']) &&
in_array($row_comuni['idcomune'],$_POST['comuni']) )?
"checked" :
"";
echo "...";
}