Самый верный способ узнать разрешение экрана - обратиться к функции GetDeviceCaps из интерфейса GDI,  проблема только в том, что этот интерфейс реализован в Си и не поддерживается в штатной поставке Compact Framework.
К этому интерфейсу можно добраться через механизм, который в .NET назвали Platform Invoke. В С# надо объявить несколько методов специального вида, вызовы которых во время исполнения программы будут перенаправляться в реализацию интерфейса на Си.
Вот пример, который делает обёртку вокруг нескольких низкоуровневых функций из GDI.
using System;
using System.Runtime.InteropServices;
    class GDIHelper
    {
        [DllImport("coredll.dll", SetLastError = false)]
        public static extern IntPtr GetDC(IntPtr hWnd);
        [DllImport("coredll.dll", SetLastError = false)]
        public static extern int ReleaseDC(IntPtr hWnd, IntPtr hdc);
        [DllImport("coredll.dll", SetLastError = false)]
        public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
        public static int GetDeviceCaps(int nIndex)
        {
            IntPtr hDC = GetDC(NULL);
            int result = GetDeviceCaps(hDC, nIndex);
            ReleaseDC(NULL, hDC);
            return result;
        }
        public static IntPtr NULL = new IntPtr(0);
        // Константы для GetDeviceCaps
        public const int DRIVERVERSION = 0;     /* Device driver version                    */
        public const int TECHNOLOGY = 2;     /* Device classification                    */
        public const int HORZSIZE = 4;     /* Horizontal size in millimeters           */
        public const int VERTSIZE = 6;     /* Vertical size in millimeters             */
        public const int HORZRES = 8;     /* Horizontal width in pixels               */
        public const int VERTRES = 10;    /* Vertical height in pixels                */
        public const int BITSPIXEL = 12;    /* Number of bits per pixel                 */
        public const int PLANES = 14;    /* Number of planes                         */
        public const int NUMBRUSHES = 16;    /* Number of brushes the device has         */
        public const int NUMPENS = 18;    /* Number of pens the device has            */
        public const int NUMMARKERS = 20;    /* Number of markers the device has         */
        public const int NUMFONTS = 22;    /* Number of fonts the device has           */
        public const int NUMCOLORS = 24;    /* Number of colors the device supports     */
        public const int PDEVICESIZE = 26;    /* Size required for device descriptor      */
        public const int CURVECAPS = 28;    /* Curve capabilities                       */
        public const int LINECAPS = 30;    /* Line capabilities                        */
        public const int POLYGONALCAPS = 32;    /* Polygonal capabilities                   */
        public const int TEXTCAPS = 34;    /* Text capabilities                        */
        public const int CLIPCAPS = 36;    /* Clipping capabilities                    */
        public const int RASTERCAPS = 38;    /* Bitblt capabilities                      */
        public const int ASPECTX = 40;    /* Length of the X leg                      */
        public const int ASPECTY = 42;    /* Length of the Y leg                      */
        public const int ASPECTXY = 44;    /* Length of the hypotenuse                 */
    }
Константы взяты из заголовочного файла wingdi.h
После добавления класса GDIHelper в свой проект вместо обращений к свойствам PrimaryMonitorSize надо делать вызовы GDIHelper.GetDeviceCaps(HORZRES) и GDIHelper.GetDeviceCaps(VERTRES):
label1.Text = GDIHelper.GetDeviceCaps(GDIHelper.HORZRES)
                + " x " +
                GDIHelper.GetDeviceCaps(GDIHelper.VERTRES)