Pelo que entendi, você deseja listar arquivos que contenham ambos "keyword1" e "keyword2". Para fazer isso, você pode usar dois testes -exec da seguinte maneira:
find . -name "*.xml" -exec grep -iq keyword1 {} \; -exec grep -iH keyword2 {} \;
Isso executará o segundo grep condicionalmente - se o primeiro retornar verdadeiro. A opção -q impede a saída do primeiro grep , pois listaria todos os arquivos que incluem apenas "keyword1".
Como a opção -H exibe a linha correspondente junto com o nome do arquivo, é provável que você queira usar -l . Então
find . -name "*.xml" -exec grep -iq keyword1 {} \; -exec grep -il keyword2 {} \;
Isso produzirá resultados semelhantes aos sugeridos por Caleb, mas sem a necessidade de -print adicional.