Заметил, что в секции CATCH используется идентификатор компонента, который удаляется в секции TRY.
Попробовал, вариант, где в секции CATCH сообщения пишутся по нулевому идентификатору (в этом случае сообщения регистрируются как сообщения от компонента "СМ"):
Код:
IF DelCmp THEN
	DelCmp := FALSE;
	DelCntr := DelCntr + 1;
	LogAdd2(LOG_STD_LOGGER, udiCmpID,CmpLog.LogClass.LOG_WARNING, CmpErrors.Errors.ERR_FAILED, 1,'Deleting Component');

	IF NOT UseTC THEN
		dwResult := Component_Manager.CMRemoveComponent(pCmp);
	ELSE
		__TRY
			dwResult := Component_Manager.CMRemoveComponent(pCmp);
		__CATCH(Exec)
			strTemp := concat('IN CATCH SECTION! Deleting Component ERROR:',UDINT_TO_STRING(Exec));
			LogAdd2(LOG_STD_LOGGER, udiBaseID,CmpLog.LogClass.LOG_WARNING, 
					CmpErrors.Errors.ERR_FAILED, 1, strTemp);	
		__ENDTRY
	END_IF
END_IF
В коде выше udiBaseID = 0.

Но поведение системы не изменилось, т.е. так же "зависает".