Bartosz Kosiorek (@gang65) commented about dlls/gdiplus/customlinecap.c:
points[2].X = cap->width / 2.0; points[2].Y = -cap->height; points[3].X = 0.0;
points[3].Y = -cap->height - cap->middle_inset;
points[3].Y = -cap->height + cap->middle_inset;
the middle inset sign was wrong in previous implementation. Now arrow looks perfectly fine.