Я использую такой метод.У меня отлично работает.
private static GraphicsPath CreateRoundRectranglePath(Rectangle rect, Size rounding)
{
var path = new GraphicsPath();
var l = rect.Left;
var t = rect.Top;
var w = rect.Width;
var h = rect.Height;
var rx = rounding.Width;
var dx = rounding.Width << 1;
var ry = rounding.Height;
var dy = rounding.Height << 1;
path.AddArc(l, t, dx, dy, 180, 90); // topleft
path.AddLine(l + rx, t, l + w - rx, t); // top
path.AddArc(l + w - dx, t, dx, dy, 270, 90); // topright
path.AddLine(l + w, t + ry, l + w, t + h - ry); // right
path.AddArc(l + w - dx, t + h - dy, dx, dy, 0, 90); // bottomright
path.AddLine(l + w - rx, t + h, l + rx, t + h); // bottom
path.AddArc(l, t + h - dy, dx, dy, 90, 90); // bottomleft
path.AddLine(l, t + h - ry, l, t + ry); // left
path.CloseFigure();
return path;
}