ottimo, una osservazione guardando questo codice..

codice:
function populateSelect(){ 
    alert('sono qui'); 
   marcauto = document.getElementById('menumarca').value; 
   httpObject = getHTTPObject(); 
   var r = Math.random(); 
   if (httpObject != null) { 
     httpObject.open("GET", "selectphp.php?MARCA=" + marcauto + "&RAND=" +escape(r), true); 
     httpObject.send(null); 
     alert ("ho finito la chiamata Ajax"); 
     populate(); 
  } 
}
perchè chiami in cascata il metodo populate? questo potrebbe non aver ancora finito (ad esempio se provi in ambiente remoti o caricati da richieste..) se non l'hai fatto io metterei il contenuto di populate() dentro l'onreadystatechange ..

probabilmente con alert funzionava perchè dava il tempo di eseguire era come una attesa a eseguire il populate..

ciao