Сдувание ограничивающего прямоугольника на 1/2 ширины хода пера должно решить эту проблему.Под «выкачиванием» я подразумеваю тянуть все 4 стороны к центру прямоугольника на 1/2 ширины пера:
float halfPenWidth = p.Width*0.5f;
g.DrawEllipse(p, new RectangleF(halfPenWidth, halfPenWidth, layer.Width - p.Width, layer.Height - p.Width));
или подключить жестко закодированную ширину пера 4:
g.DrawEllipse(p, new Rectangle(2, 2, layer.Width - 4, layer.Height - 4));
Обратите внимание, что полная ширина пера должна быть вычтена из ширины и высоты прямоугольника, чтобы вытянуть правую и нижнюю стороны на 1/2 ширины пера, сохраняя при этом прямоугольник по центру в одной и той же точке.
Использование этогокод с выравниванием по центру пера, половина ширины обводки будет нарисована вне прямоугольника в точках, где эллипс касается прямоугольника, но он все равно будет нарисован внутри растрового изображения.