Cada lote SQL deve caber no Limite de Tamanho do Lote:65.536 * Tamanho do Pacote de Rede.
Fora isso, sua consulta é limitada pelas condições de tempo de execução. Ele normalmente ficará sem tamanho de pilha porque x IN (a,b,c) não é nada além de x=a OR x=b OR x=c que cria uma árvore de expressão semelhante a x=a OR (x=b OR (x =c)), então fica muito profundo com um grande número de OR. O SQL 7 atingiria um SO em cerca de 10k valores no IN, mas hoje em dia as pilhas são muito mais profundas (por causa do x64), então pode ir bem fundo.
Atualizar
Você já encontrou o artigo de Erland sobre o tópico de passar listas/matrizes para o SQL Server. Com o SQL 2008, você também tem Parâmetros com valor de tabela que permitem passar uma DataTable inteira como um único parâmetro de tipo de tabela e unir-se a ela.
XML e XPath é outra solução viável:
SELECT ...
FROM Table
JOIN (
SELECT x.value(N'.',N'uniqueidentifier') as guid
FROM @values.nodes(N'/guids/guid') t(x)) as guids
ON Table.guid = guids.guid;