O ID do processo é um valor associado ao objeto do processo e, enquanto o objeto do processo ainda estiver por aí, o ID do processo também estará ativo. O objeto de processo permanece enquanto o processo ainda estiver em execução (o processo mantém uma referência a si mesmo implicitamente) ou enquanto alguém ainda tiver um identificador para o objeto de processo.
Se você pensar bem, isso faz sentido, porque enquanto ainda houver um identificador para o processo, alguém pode chamar WaitForSingleObject para aguardar a saída do processo ou chamar GetExitCodeProcess para recuperar o código de saída, e esse código de saída deve ser armazenado em algum lugar para recuperação posterior.
Quando todas as alças são fechadas, o kernel sabe que ninguém vai perguntar se o processo ainda está em execução ou qual é o código de saída (porque você precisa de uma alça para fazer essas perguntas). Nesse ponto, o objeto do processo pode ser destruído, o que, por sua vez, destrói o ID do processo.
O que acontece se alguém chama o OpenProcess em um processo zumbi? A mesma coisa que acontece se eles o chamam em um processo em execução: eles conseguem lidar com o processo. Por que você iria querer lidar com um processo de zumbis? Bem, você pode não saber que é um zumbi ainda; você está recebendo o identificador para que possa chamar WaitForSingleObject para ver se ele foi encerrado ainda. Ou você pode conseguir o controle, sabendo que é um zumbi, porque você quer chamar GetExitCodeProcess para ver qual era o código de saída.