This code finally worked, although I don't know why I had to extract the bitmap bm1 width and height straight after I had created the bitmap as if I tried to access these variable in the bitmap within BitBlt it failed for some reason.
Many, many thanks to Jochen for perservering with me :)
void GDICapture::CaptureDialogImage(CDialog* dialog)
{
ULONG_PTR m_gdiplusToken;
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
HWND hDialog = dialog->GetSafeHwnd();
HDC hDialogDC = GetDC(hDialog);
HDC hCaptureDC = CreateCompatibleDC(hDialogDC);
CRect rect;
dialog->GetClientRect(&rect);
int nDialogWidth = rect.Width();
int nDialogHeight = rect.Height();
HBITMAP hCaptureBitmap = CreateCompatibleBitmap(hDialogDC, nDialogWidth, nDialogHeight);
HGDIOBJ hGDIObj = SelectObject(hCaptureDC, hCaptureBitmap);
BOOL b = BitBlt(hCaptureDC, 0, 0, nDialogWidth, nDialogHeight, hDialogDC, 0, 0, SRCCOPY | CAPTUREBLT);
SelectObject(hCaptureDC, hGDIObj);
CImage image;
image.Attach(hCaptureBitmap);
image.Save(_T("C:\\test\\bitmap.bmp"));
hCaptureBitmap = image.Detach();
Bitmap* bm = new Bitmap(nDialogWidth, nDialogHeight);
HPALETTE hPal = (HPALETTE)GetStockObject(DEFAULT_PALETTE);
bm->FromHBITMAP(hCaptureBitmap, hPal);
Bitmap* bm1 = new Bitmap(nDialogWidth, nDialogHeight);
int nWidth = bm1->GetWidth();
int nHeight = bm1->GetHeight();
GetObject(hCaptureBitmap, sizeof(BITMAP), bm1);
HDC hdcMem = ::CreateCompatibleDC(GetDC(NULL));
SelectObject(hdcMem, hCaptureBitmap);
HDC emfdc = CreateEnhMetaFile(hdcMem, _T("C:\\test\\testEmf.emf"), NULL, "bkjfygsd");
BitBlt(emfdc, 0, 0, nWidth, nHeight, hdcMem, 0, 0, SRCCOPY);
::CloseEnhMetaFile(emfdc);
ReleaseDC(hDialog, hDialogDC);
DeleteDC(hCaptureDC);
DeleteObject(hCaptureBitmap);
}