Dentro il secondo foreach devi mettere solo il controllo, l'output lo devi inserire al di fuori. (Le $key le devi specificare se le utilizzi, altrimenti le puoi omettere.) Poi ho aggiunto un break perché se lo trova è inutile controllare i rimanenti.
Codice PHP:
foreach ($animali as $value) {
$check = '';
foreach ($animaliScelti as $value2) {
if($value2['id']==$value['id']) {
$check = 'checked';
break;
} // if
} // foreach
echo '<input type="checkbox" name="id[]" '.$check.' value="'.$value['id'].'" />'.$value['nome'].'
';
} // foreach