Попробуйте следующее.По умолчанию GraphicsPath использует чередующийся режим заполнения, который попеременно добавляет / вычитает из заполнения.В режиме заполнения обмотки используется направление, которое нужно сложить (по часовой стрелке) или вычесть (против часовой стрелки) из заливки.
Private Function CreatePath(ByVal area As Rectangle) As GraphicsPath
'* Set fill mode to winding (see FillMode Help)
Dim gp As New GraphicsPath(FillMode.Winding)
Dim rect As Rectangle = New Rectangle(area.Location, New Size(area.Width, area.Height \ 3))
gp.AddEllipse(rect)
'* Reorder points so that path goes clockwise (see FillMode.Winding Help)
Dim hadj As Integer = area.Height \ 4
'Left side bottom -> top
'gp.AddLine(New Point(area.X, area.Y + area.Height - hadj), New Point(area.X, area.Y + (rect.Height \ 3) + 8))
'* Right side top -> bottom (clockwise)
'* NOTE: Top Y value was a bit too high, adjusted by -3. Adjust calculation or maybe use floating point math and used rounding, ceil, or floor
gp.AddLine(New PointF(area.X + area.Width, area.Y + (rect.Height \ 3) + 9 - 3), New PointF(area.X + area.Width, area.Y + area.Height - hadj))
Dim gh As Integer = area.Width \ 4
Dim pts(4) As PointF
'pts(0) = New PointF(area.X, area.Y + area.Height - hadj)
'pts(1) = New Point(area.X + gh, area.Y + area.Height - (hadj \ 2))
'pts(2) = New Point(area.X + gh * 2, area.Y + area.Height - (hadj \ 3))
'pts(3) = New Point(area.X + gh * 3, area.Y + area.Height - (hadj \ 2))
'pts(4) = New Point(area.X + area.Width, area.Y + area.Height - hadj)
'* Reordered points (clockwise)
pts(0) = New Point(area.X + area.Width, area.Y + area.Height - hadj)
pts(1) = New Point(area.X + gh * 3, area.Y + area.Height - (hadj \ 2))
pts(2) = New Point(area.X + gh * 2, area.Y + area.Height - (hadj \ 3))
pts(3) = New Point(area.X + gh, area.Y + area.Height - (hadj \ 2))
pts(4) = New PointF(area.X, area.Y + area.Height - hadj)
gp.AddCurve(pts)
'Right side top -> bottom
'gp.AddLine(New PointF(area.X + area.Width, area.Y + (rect.Height \ 3) + 9), New PointF(area.X + area.Width, area.Y + area.Height - hadj))
'* Left side bottom -> top (clockwise)
'* NOTE: Top Y value was a bit too high, adjusted by -2. Adjust calculation or maybe use floating point math and used rounding, ceil, or floor
gp.AddLine(New Point(area.X, area.Y + area.Height - hadj), New Point(area.X, area.Y + (rect.Height \ 3) + 8 - 2))
Return gp
End Function