cv2.CAP_PROP_POS_FRAMES sometimes starts at a keyframe sometimes doesn't

no. revisit the link I gave. it shows how to more or less precisely extract the frames for an arbitrary desired frame rate.

you could also just arbitrarily grab 10 frames and read one, repeat (a lot simpler than my SO answer above), or whatever ratio you like.