sqlcmd gives no sign of failure yet doesn't work
It sounds like your transaction is rolling back (including any rows written to your ErrorLog table).  You haven't posted any TSQL source, so I'm not sure if you have the TRY/CATCH within a transaction or the transaction is within the TRY/CATCH.

I'd suggest following the guidance in this post - (TSQL Try / Catch within Transaction or vice versa?).


  Only open a transaction once you are inside the TRY block and just
  before the actual statement, and commit it straightaway. Do not wait
  for your control to go to the end of the batch to commit your
  transactions.
  
  If something goes wrong while you are in the TRY block and you have
  opened a transaction, the control will jump to the CATCH block. Simply
  rollback your transaction there and do other error handling as
  required, which might include writing rows to your ERRORLOG table.


Here's the code sample from the post above.

BEGIN TRY

  BEGIN TRANSACTION SCHEDULEDELETE
    DELETE   -- delete commands full SQL cut out
    DELETE   -- delete commands full SQL cut out
    DELETE   -- delete commands full SQL cut out
 COMMIT TRANSACTION SCHEDULEDELETE
    PRINT 'X rows deleted. Operation Successful Tara.' --calculation cut out.
END TRY

BEGIN CATCH 
  IF (@@TRANCOUNT &gt; 0)
   BEGIN
      ROLLBACK TRANSACTION SCHEDULEDELETE
      PRINT 'Error detected, all changes reversed'
   END 
    SELECT
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_LINE() AS ErrorLine,
        ERROR_MESSAGE() AS ErrorMessage
END CATCH