O problema com a diferença entre chamar o SP diretamente e do código .NET, talvez devido ao sniffing de parâmetro. O SQL Server talvez tenha um plano de execução de cache que não seja ideal para os parâmetros que você está passando do código.
Para evitar isso, tente adicionar WITH RECOMPILE à sua definição de SP, por exemplo.
CREATE PROCEDURE MySP (
... parameters...
) WITH RECOMPILE
AS
BEGIN
...