Diría que deberías usar SCOPE_IDENTITY()
como @@identity
devolverá la identidad de lo último insertado (que puede no ser su procedimiento almacenado si se ejecutan varias consultas simultáneamente).
También debe SELECCIONARLO, no DEVOLVERLO.
ExecuteScalar
devolverá el valor de la primera columna de la primera fila de un conjunto de resultados.
Entonces...
SELECT SCOPE_IDENTITY();
es probablemente más lo que quieres.