Editar:
Eu pesquisei para verificar minha resposta:"Processando filas de dados no SQL Server com READPAST e UPDLOCK". Já faz anos desde que li e brinquei com essa solução.
Original:
Se você usar a dica READPAST, as linhas bloqueadas serão ignoradas. Você usou o ROWLOCK, portanto, evite o escalonamento de bloqueio. Você também precisa do UPDLOCK, como descobri.
Portanto, o processo 1 bloqueia 20 linhas, o processo 2 leva as próximas 20, o processo 3 as linhas 41 a 60, etc.
A atualização também pode ser escrita assim:
UPDATE TOP (20)
foo
SET
ProcessorID = @PROCID
FROM
OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
ProcessorID = 0
Atualizar, outubro de 2011
Isso pode ser feito de forma mais elegante com a cláusula OUTPUT se você precisar de um SELECT e um UPDATE de uma só vez.