Hola de nuevo.
Carxl, lo he conseguido solucionar

,y más o menos era como me dijisteis tú y GatorV. Salvo una cosa:
Código PHP:
mysql_query('BEGIN');
$id=mysql_insert_id(); //faltaba poner esta instrucción porque si no el valor $id de sql1 no existe.
$sql1="INSERT INTO usuarios (id, alias, clave, privilegios, mail, dni, valido, aleatorio) VALUES (".$id.",'".$usuario."','".md5($clave)."', 1, '".$mail."', '".$dni."', 0, ".rand().")";
mysql_query($sql1,$conexion) or die(mysql_query('rollback'));
$id=mysql_insert_id();
$sql2= "INSERT INTO log (usuario, evento, ip) VALUES (".$id.",1, '".$_SERVER['REMOTE_ADDR']."')";
mysql_query($sql2,$conexion) or die(mysql_query('rollback'));
mysql_query('COMMIT');
header('Location: form.php');
Pero tras solucionarlo y tras leer la documentación de mysql_insert_id(), no me ha quedado claro.
El trozo de código anterior es para introducir un usuario nuevo y registrarlo en log.
cuando se ejecuta la primera instrucción $id=mysql_insert_id(); el valor de id que toma es el
siguiente al identificador del último usuario añadido en la tabla usuarios.
Pero al ejecutar $id=mysql_insert_id(); por segunda vez, me devuelve el
mismo identificador que en la primera sentencia $id=mysql_insert_id();
(por lógica tendría que devolver el siguiente).
Por ésto, creo que hay algo que se me escapa y hace que no lo entienda bien.
Haber si alguien me puede aclararlo.
Saludos a todos.