Rafael, em seu primeiro bloco de código você não está retornando ints. Está retornando boleanos. O algoritmo é analisado e cada vez que a pergunta é feita :" O resultado da divisão desse inteiro por 2 tem resto zero?", a resposta vai sendo item a item processada e te retorna um boleano True (sim) ou False (não).
1 = False
2 = True
3 = False
4 = True
etc
Um teste para verificar a classe nesse caso:
print(type(pares[0]))
<class 'bool'>
No segundo bloco de código, você tem uma situação diferente acontecendo. Você está retornando quais desses inteiros são pares, seu reultado será de natureza int (numeros).
Teste para verificação da classe para o elemento na posição inicial:
print(type(pares[0]))
<class 'int'>
É legal que vc tenha feito o teste de ambas as formas. Eu não diria que um é mais completo que o outro. VC somente buscou coisas diferentes em cada um deles. Ambos podem ser bastante úteis dentro de engrenagens que podem fazer parte de um programa mais complexo. ;)