Não é bem uma resposta, mas vou compartilhar minha experiência.
A detecção de parâmetros levou alguns anos de SQL Server para vir e me morder, quando voltei para o Developer DBA depois de me mudar para principalmente o trabalho de DBA de produção. Eu entendi mais sobre o motor, como funciona o SQL, o que era melhor deixar para o cliente etc e eu era um melhor codificador SQL.
Por exemplo, SQL dinâmico ou CURSORs ou simplesmente código SQL ruim provavelmente nunca sofrerão sniffing de parâmetro. Mas melhor definir a programação ou como evitar SQL dinâmico ou SQL mais elegante provavelmente o fará.
Percebi isso para código de pesquisa complexo (muitas condicionais) e relatórios complexos em que os padrões de parâmetro afetavam o plano. Quando vejo como desenvolvedores menos experientes escreveriam esse código, ele não sofrerá sniffing de parâmetros.
De qualquer forma, prefiro mascarar parâmetros a WITH RECOMPILE. Atualizar estatísticas ou índices força uma recompilação de qualquer maneira. Mas por que recompilar o tempo todo? Eu respondi em outro lugar a uma de suas perguntas com um link que menciona que os parâmetros são rastreados durante a compilação, então também não tenho fé nisso.
O mascaramento de parâmetros é uma sobrecarga, sim, mas permite que o otimizador avalie a consulta caso a caso, em vez de uma recompilação geral. Especialmente com recompilação em nível de instrução do SQL Server 2005
OPTIMIZE FOR UNKNOWN no SQL Server 2008 também parece fazer exatamente a mesma coisa que mascarar. Meu colega MVP do SQL Server e eu passamos algum tempo investigando e chegamos a essa conclusão.