Shortly after posting the question I found the answer. QImage is created with uninitialized data.
Adding this cleared it up: self.image.fill(0)