Put the objects in a temporary block, and handle the RXClass.EntityAlignment event on the RXClass for the BlockReference object (AcDbBlockReference).
Barring the provision of a custom object, that would work exclusively when grip-editing the temporary block?
You made me curious; but it seems that grip-editing a BlockReference whose definition includes an Alignment parameter is currently the only way to access this feature from .NET.
If I recall correctly, I used an empty dynamic block with an alignment grip/parameter at the origin. The user's selection was cloned into the dynamic block's definition, and an insertion of it replaced the user's selection. They could then grip-edit the insertion, and when they finished, the insertion was replaced with the original entities transformed accordingly. I used the QAFLAGS trick to activate grip editing for the block insertion.
The idea was to make a dynamic move/copy/rotate command that allowed the user to pick the objects to be moved/copied/rotated, along with an alignment reference curve (or an alignment vector) that defines the alignment, and they could then edit the objects like it was an insertion of a dynamic block with an alignment parameter.
That work was focused on dynamic alignment in editing of existing objects rather than initial placement (which alone may be novel, but not terribly practical).
It should go without saying that all of that can be done using Jigs