I have found the answer. lfHeight must be converted from print units to screen units because the CFontDialog class uses screen units. Here is the updated code:
ASSERT(pDC->GetMapMode() == MM_TEXT);
LOGFONT lf;
::ZeroMemory(&lf, sizeof(LOGFONT));
int nPrintDpi = pDC->GetDeviceCaps(LOGPIXELSY);
lf.lfHeight = -MulDiv(10, pDC->GetDeviceCaps(LOGPIXELSY), 72);
// Convert lfHeight from print units to screen units
// because the CFontDialog class uses Screen units
HDC hDC = GetDC(m_pView->m_hWnd);
int nScreenDpi = GetDeviceCaps(hDC, LOGPIXELSY);
lf.lfHeight = MulDiv(lf.lfHeight, nScreenDpi, nPrintDpi);
lstrcpy(lf.lfFaceName, _T("Arial"));
CFontDialog dlg(&lf, CF_PRINTERFONTS, pDC);
if (dlg.DoModal() == IDOK)
{
m_strFont = dlg.GetFaceName();
m_nPointSize = dlg.GetSize() / 10;
}