Intenta devolver explícitamente SQL%ROWCOUNT.
Según MSDN, DbCommand..ExecuteNonQuery siempre devolverá -1 para las llamadas a procedimientos almacenados:
Si no recuerdo mal de mis días en los que usaba muchos procesos almacenados, creo que necesitaría usar un argumento de salida para devolver cosas como la cantidad de filas actualizadas.