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