Prova a restituire esplicitamente SQL%ROWCOUNT.
Secondo MSDN, DbCommand..ExecuteNonQuery restituirà sempre -1 per le chiamate di stored procedure:
Se ricordo bene i miei giorni in cui usavo molti processi archiviati, credo che dovresti usare un argomento di output per restituire elementi come il numero di righe aggiornate.