Realistically you should just re-render the whole rendertarget when you need to update it.
Doing incremental updates is going to have erratic performance characteristics if you ever have to update more than 1 region at a time. In effect, you're just doing immediate mode rendering without clearing as you have to setup a scissor -> draw into that (or worse, as you describe, set a viewport, clear, and draw into that).
If you have to update 6 tiles it's going to be 5x worse than drawing a well-atlased collection of tiles.
Clearing then drawing isn't a good choice unless you can 100% guarantee that your draw will cover EVERY single row and column in the cleared area (ie. floor all lowerbound and ceil all upperbound floats), or that cleared status is okay (like a SNES sprite layer). Scissor is much safer, you'll at least have something there in the case of a substrate.
I'd just do it exactly like modern virtual-textures for terrain: subdivide to a reasonable scope and invalidate whole rendertarget tiles, completely rerender the rendertarget, and be done with it. Then I'd tweak for project specific needs, terrain for instance never needs instant feed back so tiles can be late a few frames - but other things might not be able to wait.