I don't know why but my wild guess is it has todo with drawing ovals at more extreme w, h ratios, when the points are on the extremes you will need a pushing point in the middle to nice curve back.
@gferreira you method only works for circles...
the drawBot RoboFont extension has points on the extremes, cause the context is type... see https://github.com/typemytype/drawBotRoboFontExtension/blob/master/DrawBot.roboFontExt/lib/glyphContext.py#L23
see the big difference when the oval is getting thinner...
def straightOval(x, y, w, h):
c = 0.55
hx = w * c * .5
hy = h * c * .5
path = BezierPath()
path.moveTo((x + w * .5, y))
path.curveTo((x + w * .5 + hx, y), (x + w, y + h * .5 - hy), (x + w, y + h * .5))
path.curveTo((x + w, y + h * .5 + hy), (x + w * .5 + hx, y + h), (x + w * .5, y + h))
path.curveTo((x + w * .5 - hx, y + h), (x, y + h * .5 + hy), (x, y + h * .5))
path.curveTo((x, y + h * .5 - hy), (x + w * .5 - hx, y), (x + w * .5, y))
path.closePath()
drawPath(path)
x, y, w, h = 10, 10, 8.0, 146.0
oval(x, y, w, h)
straightOval(x + w + 10, y, w, h)