I think the one line that may fix it would be this:
painter.setCompositionMode(painter.CompositionMode_Source)
It tells the painter to just copy the new pixel, without considering the destination pixels alpha. It may related to how the drawEllipse handles the area outside the shape, over the previously drawn transparent pixels
I didn't need to do it with a pixmap or image first, but then again I am not sure what you will be doing in this paint method beyond this test example:
def paint(self, painter, rect, mode, state):
painter.setRenderHint(painter.Antialiasing)
painter.setCompositionMode(painter.CompositionMode_Source)
painter.fillRect(rect, QtCore.Qt.transparent)
painter.setPen(QtGui.QPen(QtCore.Qt.red))
painter.setBrush(QtGui.QBrush(QtCore.Qt.red))
painter.drawEllipse(rect)