Aquí tienes otra versión de tu código que tal vez se lea mejor:
Código PHP:
Ver original<form>
<?php
//1. La select
$sql = "SELECT * FROM letrasgrupo ORDER BY letra ASC";
//2. La consulta a la db
?>
<select name="selpoblacion" id="selpoblacion" style class="Guias2">
<option value="-1" selected>Todas las poblaciones</option>
<?php
//Por cada registro de la DB, un option
{
//OJO: ESTA ASIGNACION HACE QUE myVar TOME EL VALOR DE EL ULTIMO REGISTRO QUE TRAE ESTA SELECT
//ADEMAS, ESTAS ASIGNANDO EL VALOR DE LETRA Y PARECE QUE LO QUE NECESITAS ES EL VALOR DE ID
$myVar = $registroletra['letra'];
?>
<option value="<?php echo $registroletra['Id']; ?>"><?php echo $registroletra['letra']; ?></option>
<?php
}
?>
</select>
<input type="submit" value="Buscar">
</form>
No entiendo lo de la trampa, pero estás asignando el valor de letra y no el de id, además, como te comento, si lo haces así, $myVar toma el valor del ultimo registro que trae la select. No sé qué esperas de esa variable.
Respecto de la variable $criterio, no puedo decirte nada porque no sé donde va ni que valor trae. En cualquier caso , haz un echo de la select y pruebala en un cliente mysql para ver qué sale.
Salu2