Q:

GraphicsPath.AddPolygon not rendering properly

Basically I have a form and am trying to "dim" areas of it to draw focus to a certain part of the form. To do this I'm using a Form with no border and 50% opacity, aligned with the actual form. The area I am trying to mask is the dark gray area, roughly, as pictured:

To get the "U"-shaped form, I'm using a GraphicsPath with AddPolygon, calculating the points of each vertex:
var p = new GraphicsPath();
var origin = new Point(Top, Left);
var maxExtentPt = new Point(origin.X + Width, origin.Y + Height);
Point[] points = {
    origin, 
    new Point(origin.X + leftPanel.Width, origin.Y),
    new Point(origin.X + leftPanel.Width, maxExtentPt.Y - bottomPanel.Height),
    new Point(maxExtentPt.X - rightPanel.Width, maxExtentPt.Y- bottomPanel.Height),
    new Point(maxExtentPt.X - rightPanel.Width, origin.Y),
    new Point(maxExtentPt.X, origin.Y),
    maxExtentPt,
    new Point(origin.X, maxExtentPt.Y),
    origin
};
p.AddPolygon(points);
overlayForm.Region = new Region(p);
overlayForm.Location = PointToScreen(Point.Empty);

The three panels in the code are what I am masking, so I am using their dimensions to calculate the points. Instead of getting my expected result, the mask looks like this, with its size changing as I resize the main form (I recalculate the region on Move and Resize):

Is there some limitation of GraphicsPath.AddPolygon that I'm not aware of? I double-checked (quadruple-checked, really) the results of my calculations, including taking the coordinates for each point and plugging them into Ipe to see if the shape was actually correct... It was. But not in my program!
Edit: Here are the values of each point, when I hit a breakpoint at p.AddPolygon(points); I'm starting in the upper left-hand corner and going around clockwise:

A:

Looks like your points are wrong after all. 
Everything ought to be in the coordinates of the ClientRectangle, so
Origin should not be  new Point(Top, Left) which is the Location of the Form. It should be Point.Empty or (0,0). Or you could use the leftPanel.Location.
And 
maxExtentPt = new Point(origin.X + Width, origin.Y + Height);

should read:
var maxExtentPt = new Point(origin.X + ClientSize.Width, origin.Y + ClientSize.Height);

(The difference is the size of border+title..)
Let me know if that works better!

