Can db_datareader user block ALTER TABLE statement?
Yes. The first query has left an open transaction. SQL Server doesn't check if the current user has permissions at compile time. It will find out at run time. If you were writing a stored procedure you wouldn't want to check permissions at compile time as a different user may execute the procedure.

Wrapping the UPDATEs, in both queries, in a TRY CATCH would avoid leaving an open transaction.

BEGIN TRY
    BEGIN TRAN

    UPDATE [TestDB].[dbo].[Table_1]
      SET Col1 = 'Test';

    COMMIT TRAN
END TRY
BEGIN CATCH
    IF @@TRANCOUNT &gt; 0
        ROLLBACK;

    ;THROW;
END CATCH