By calling ID3D11DeviceContext::UpdateSubresource? (or perhaps better by creating a second resource and calling ID3D11DeviceContext::CopyResource or ::CopySubresourceRegion)? Those functions do talk about being asynchronous calls. But then I'm back to the same point of needing a synchronization object like the fences in OpenGL to know when the copy has succeeded.
I've been researching it while typing out this post. It looks like I want to do a ID3D11Device::CreateQuery call with D3D11_QUERY_EVENT...? (It also looks like I was doing my call to glFenceSync out of order; it should be after the asynchronous call to upload the data). I call CreateQuery, then CopyResource, and then Context->End(Query). I can then check the state of the query with Context->GetData.
Does that sound right? I'm going to bed anyway so I'll just give it a shot tomorrow.
This technique would work for the one point in the scene that you render as the center of the cube maps. When you render the lights into the cube map, you're doing it relative to this one point. So that one point would be lit correctly. Everything else would be skewed.