Försök att uttryckligen returnera SQL%ROWCOUNT.
Enligt MSDN kommer DbCommand..ExecuteNonQuery alltid att returnera -1 för lagrade proceduranrop:
Om jag minns rätt från mina dagar med att använda massor av lagrade processer, tror jag att du skulle behöva använda ett output-argument för att returnera saker som antalet uppdaterade rader.