Проблемът с разликата между директно извикване на SP и от .NET код, може би поради надушване на параметри. SQL Server може би кешира план за изпълнение, който не е оптимален за параметрите, които предавате от кода.
За да избегнете това, опитайте да добавите WITH RECOMPILE към вашата SP дефиниция, напр.
CREATE PROCEDURE MySP (
... parameters...
) WITH RECOMPILE
AS
BEGIN
...