chanman, rendering process going absolutely asynchronous to any part of client code. Actually different renders can be used: GPU and software renderer. And dirtyRects in current impl has updated region. For software rendering it is always show updated region, usually rounded to composition layers (256/512px squares). For GPU rendering i'm not sure which bounds provided. Also CEF maintains own pixelbuffer (and provides pointer to it in OnPaint call). Invalidate call queue task to call OnPaint correctly to push CEF-maintained pixelbuffer to client. Also if you throttle framerate - dirtyRect will be expanded (i.e. update left-top and right-bottom pixel will cause full buffer update, not a two rects.)
So... if you don't want to update full surface - you CAN read any region from provided pixel buffer. For example set flag + interesting region, call Invalidate. OnPaint consumes flag+region. Of course whenever address of pixelbuffer changed or dimensions changed - this is will be full update in all cases. Note, that "erase background" when view size changed also appears in OnPaint and in most cases it is not interested.
In any way: if it is video - fast updates => should be ok to catch only portion of buffer.