FYI I solved this problem. Talk about a needle in a haystack. Maybe I would have saved some time if I had debugged from the DNN source.
In the end it came down to the difference between a lowercase and uppercase L. In my code I was calling the AddNewModule procedure that I had stolen from ControlPanel.vb to create my module and passing in "Left" for the align parameter. That call did NOT throw and error. However later when I looked at settings for my new module from the page I got an exception. It turns out that the settings code was choking on "Left". Once I changed the database value to "left" then it was fine. I had found my needle.
For those looking to repeat my sucess and not my failure. Here are the basic steps to add a new module to a page programmatically. Note that in my case I was adding an effority module. Also the original AddNewModule procedure adds to the ActiveTab, so you I just moved the module to the tab I wanted
Dim objModules As ModuleController = New ModuleController()
Dim modInfo As ModuleInfo
Dim modInfoNew As ModuleInfo
' Get the DesktopModule and then use it to add the module to a page
modInfo = objModules.GetModuleByDefinition(PortalSettings.PortalId, "effority.WF_HTML")
AddNewModule(sTitle, modInfo.DesktopModuleID, "ContentPane", 0, ViewPermissionType.View, "left")
' Find the module that was added
Dim dicModules As Dictionary(Of Integer, ModuleInfo) = objModules.GetTabModules(PortalSettings.ActiveTab.TabID)
For Each kvp As KeyValuePair(Of Integer, ModuleInfo) In dicModules
modInfoNew = kvp.Value
If (sTitle = modInfoNew.ModuleTitle) And (modInfoNew.PaneName = "ContentPane") Then
Exit For
End If
Next
' Move the module from the current Tab to a new tab. Note objCopyToTab is a TabInfo object representing my new tab.
' I created that new tab by following the instructions on the two articles I cited above.
objModules.MoveModule(modInfoNew.ModuleID, PortalSettings.ActiveTab.TabID, objCopyToTab.TabID, "ContentPane")