Another issue when displaying the dialog was that the page that I was displaying contained all the elements of the master page that typical pages display (header, footer, etc). This made the dialog too busy for the simple task it was asked to do. To fix this, I added the MasterPageFile attribute to the Page directive which overrides DynamicMasterPageFile attribute.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AnnouncementPage.aspx.cs" Inherits="MyPages.WebParts.Layouts.AnnouncementPage" DynamicMasterPageFile="~masterurl/custom.master" MasterPageFile="~/_layouts/applicationv4.master" %>
In the end, a uncluttered summary list and detailed model dialog:
Code that made it happen: