Something that has always frustrated me: Why doesn’t logging from an immediate custom action work?. Christopher Painter pointed out a documented (!) answer.
“Note that custom actions launched by a DoAction ControlEvent can send a message with the Message method, but cannot send a message with MsiProcessMessage. On systems prior to Windows Server 2003, custom actions launched by a DoAction ControlEvent cannot send messages with MsiProcessMessage or Message. For more information, see Sending Messages to Windows Installer Using MsiProcessMessage.”