Hey,
I'm using the same kind of code you used (with a _createPreviewIOSurface inside a timer), and I just found a way to superpose drawings without affecting the Preview image.
You just have to add a UIWindow, with a transparent view, and draw inside that view :
Code:
cameraController = [(id)objc_getClass("PLCameraController") performSelector:@selector(sharedInstance)];
[cameraController retain];
[cameraController setDelegate:self];
[cameraController setFocusDisabled:NO];
[cameraController setDontShowFocus:YES];
[cameraController setCameraMode:1];
previewView = [self.cameraController performSelector:@selector(previewView)];
[previewView retain];
previewView.center = CGPointMake(previewView.center.x, previewView.center.y + 43);
[self.view addSubview:previewView];
myImageView = [[MyImageView alloc] initWithFrame:previewView.frame];
myImageView.center = CGPointMake(myImageView.center.x, myImageView.center.y + 20);
myImageView.backgroundColor = [UIColor clearColor];
myWindow = [[UIWindow alloc] init];
[myWindow addSubview:myImageView];
[myWindows makeKeyAndVisible];
with MyImageView a UIView class in which I derived the drawRect method, and with a call to [faceImageView setNeedsDisplay] inside the timer method.
It's still not the best method ever to grab the camera buffer, but at least I can start displaying things without affecting my algorithm.