the main problem is, that you can't have an image, which is partly 3chan/rgb and partly 1chan/gray.
my solution would be , to work on a copy of the roi in the 1st place, and later convert it back to rgb and paste it into the original image.
img = imread("M:/Desktop/PsEyeRight.jpg", CV_LOAD_IMAGE_COLOR); // original
Mat roi(img, Rect(Point(205, 72), Point(419,285)));
Mat work = roi.clone();
cvtColor(work , work , CV_BGR2GRAY);
threshold(work , work , 150, 255, THRESH_BINARY);
// findContours(work,...);
cvtColor(work , roi, CV_GRAY2BGR); //here's the trick