Problemet med skillnaden mellan att ringa SP direkt och från .NET-kod, kanske på grund av parametersniffning. SQL Server kanske cachelagrar exekveringsplan som inte är optimal för parametrarna du skickar från koden.
För att undvika detta försök lägga till WITH RECOMPILE till din SP-definition, t.ex.
CREATE PROCEDURE MySP (
... parameters...
) WITH RECOMPILE
AS
BEGIN
...