È perché stai definendo il parametro in .NET come ReturnValue che equivarrebbe effettivamente allo scenario in cui usi RETURN all'interno della stored procedure per restituire un intero (cosa che non stai facendo).
È invece necessario definire il parametro @strFailedEMPID come ParameterDirection.Output all'interno del codice .NET. Se vuoi passare un valore E riceverne uno in uscita tramite il parametro, usa ParameterDirection.InputOutput.
Dopo aver eseguito lo sproc, devi solo:
string value = lsqlCmd.Parameters["@strFailedEMPID"].value;
Allora....
lsqlParam = new SqlParameter("@strFailedEMPID ", SqlDbType.VarChar);
lsqlParam.Value = "0";
lsqlParam.Direction = ParameterDirection.InputOutput;
lsqlCmd.Parameters.Add(lsqlParam);
lsqlCmd.ExecuteNonQuery();
string value = lsqlCmd.Parameters["@strFailedEMPID"].value;