Upon further investigation on this, it seems the real bug is with BayerRG → RGB conversion:
In the code and data I uploaded above, the behavior with the YUYV->RGB conversion is actually expected, because cv2.imshow() assumes BGR order. So the red and blue channels are switched w.r.t. the .bmp image from the camera in the case of YUYV->RGB conversion.
But in the case of BayerRG->RGB conversion I attempt above, OpenCV actually produces a BGR image, which matches the camera-produced RGB image only because cv.imshow() switches the red and blue channels.
Thoughts?