This should really be two MRs, one for BindDC and one for IsSupported, so one fix does not hold another.
Regarding BindDC, tests look inconclusive to me. Empty draw could indeed mean that surface is initialized, but it can also mean that what we do in d2d_dc_render_target_present() should not be called at all for empty draws. What you need to test is underlying surface directly, right after BindDC. You can do that by rt->QI(device_context) -> GetTarget -> QI(Bitmap1) -> GetSurface() -> GetDC(). This will tell you if target bitmap is initialized on BindDC(). To test if empty draws actually copy contents back, you could alter bound hdc with e.g. FillRect(), do empty draw, and check if it was changed back to initial contents.
Also note that BindDC() has a rectangle argument, and if tests show you need to initialize the target, we probably should be using this rectangle in BitBlt(), instead of (0,0) origin.