Проще всего чередовать рисование чёрным и белым - нарисовать чёрный полукруг, потом 4 круга и внешнюю окружность. Как-то так:
private static void DrawYinYang(Graphics gr,int xctr,int yctr,int rmax,int rint,int ysmall,int rsmall) {
Brush white=Brushes.White;
Brush black=Brushes.Black;
Pen BlackPen=new Pen(Color.Black,2*(rmax-rint));
gr.FillPie(black,xctr-rmax,yctr-rmax,2*rmax,2*rmax,-90,180);
gr.FillEllipse(white,xctr-rint/2,yctr-rint,rint,rint);
gr.FillEllipse(black,xctr-rint/2,yctr,rint,rint);
gr.FillEllipse(white,xctr-rsmall,yctr+ysmall-rsmall,2*rsmall,2*rsmall);
gr.FillEllipse(black,xctr-rsmall,yctr-ysmall-rsmall,2*rsmall,2*rsmall);
double rcircle=(rmax+rint)/2.0;
gr.DrawEllipse(BlackPen,(float)(xctr-rcircle),(float)(yctr-rcircle),(float)(2*rcircle),(float)(2*rcircle));
}
Если же хочется именно закрасить криволинейную фигуру, надо изучать, что такое GraphicPath, и использовать FIllRegion. Но я так не пробовал.