Ok. I found the answers myself.
It seems the DB model is like this:
Tab->TabModules->Modules->Modulesettings.
Note: A Tab is a Page.
Tabs
This table contains the actual pages.
Has one to many to TabModules, the panes on the page.
TabModules
Contains the panes on the page.
Has 1:n to Tabs (Every page can contain multiple panes)
Every pane has a 1:1 relation to a module.
Module
The table that holds the module instances of the module definitions.
Module Settings
Contains extra module settings of a module instance.
(Note: This is where copying fails. When copying pages in the process of creating new pages, the rows in the table is not copied also.
Now if you use "Add Page" on the basis of the copy page functionality, the ModuleSettings are not copied.
(I suggest in the new DotNetNuke release to add an extra "include modulesettings feature" on the AddPage view. Then every user has the freedom to decide whether or not to copy settings of modules also)
As a workaround, I created my own C# module.
In the basis I re-use the DotNetNuke object model, see code below.
Note the last boollean parameter in CopyTab. That does the trick, and also copies module settings.
//Retrieve source tab/page back on id
TabController tabTC = new TabController();
TabInfo ti = tabTC.GetTab(iTabId);
int iOldTabId = ti.TabID;
//Set project name
ti.TabName = txtNewProjectName.Text;
//Create new empty tab
int iNewTabId = tabTC.AddTab(ti, true);
tabTC.CopyTab(ti.PortalID,
iOldTabId,
iNewTabId,
true);
//now make sure the new tab has the proper new parent
TabInfo tiNew = tabTC.GetTab(iNewTabId);
int iNewParentId = Int32.Parse(cmbNewParent.SelectedValue);
tiNew.ParentId = iNewParentId;
tabTC.UpdateTab(tiNew);
(If I find out how to attach a zip to this blog, I'll add the module somehow later)