On a recent project, ThreeWill created a series of Publishing sites based on custom Site definitions and custom layout pages. Within the custom Site definitions, we needed to create the default home page (default.aspx) based on a custom layout page. In order to properly view and edit a page that is based on a custom layout page, the underlying content type that the custom layout page is based upon must first be added to the Pages library.
Site Provisioning Provider code must inherit from the SPWebProvisioningProvider class and must be compiled into an assembly dll with a strong name and installed in the GAC. A Site definition can then reference the Site Provisioning Provider class from inside a configuration within the Web template file as demonstrated below:
Below you can see code similar to what was implemented on our project to add the custom content type to the Pages library. I've circled items that I believe are noteworthy such as the need to "RunWithElevatedPriveleges" and the need to "AllowUnsafeUpdates". Note that this scenario assumes the custom content type has already been deployed prior to the new Site creation.