Here's my quick analysis of the problem.
AlterTableConstantAction.dropColumnFromTable() holds the logic to detect if there are any triggers which depend on the column being dropped. That routine checks whether the dropped column is in the array in TriggerDescriptor.getReferencedCols() for any trigger. That, in turn, translates into whether the dropped column turns up in the ReferencedColumns object for some trigger. That object is persisted in SYS.SYSTRIGGERS.REFERENCEDCOLUMNS. Unfortunately, the only columns which are recorded in that object are the columns which appear in the UPDATE OF clause of the trigger. We don't persistently record the columns which appear in the action clause of the trigger. Here are some possible solutions to this problem:
1) Persistently record the columns which appear in the action clauses of triggers. This could involve expanding the meaning of the REFERENCEDCOLUMNS column or adding a new column to SYS.SYSTRIGGERS. In order to handle pre-existing triggers, the upgrade logic would need to drop and recreate all triggers.
2) Alternatively, AlterTableConstantAction.dropColumnFromTable() could parse the action statements of all triggers on the table to see if any of them mention the dropped column.