Sem ver o resultado real, é difícil dizer exatamente o que está acontecendo, mas acredito que isso seja causado pelo fato de o comando lsof -p PID estar apenas imprimindo arquivos abertos pelo PID especificado, enquanto o lsof | grep PID é imprimir todas as linhas onde 'PID' está localizado em qualquer lugar da linha. Por exemplo, se você estiver procurando por PID = 123, a opção grep também imprimirá linhas para 1231, 1232, 1233 etc. do PID, bem como quaisquer arquivos localizados em pastas com 123 em qualquer lugar do caminho completo.
EDITAR:
Em seu exemplo específico, a diferença é que lsof está ignorando arquivos abertos por um encadeamento. Se você observar a saída no exemplo grep , a terceira coluna será o 'TID' ou o ID do thread. As linhas sem um TID correspondem ao que você estava vendo quando usou a opção -p . Linhas com um TID (ou seja, linhas abertas por outros tópicos) são os extras.