I view StartOpenCloseTransaction as a container that disposes each item when calling commit or abort. It has no relationship to a database, nor does it create an undo record.
I also prefer not using transactions, as shown in the OpenClose sample, it's more arx style
You can also roll your own container, i.e. subclass List and dispose the elements
similar to doing something like std::vector<AcDbObjectPointer>