Original rectangles are not required. What's important is only that the new rectangles cover the exact same portions of the plane as the original rectangles. This rules out computing the convex hull and then decomposing, because that would fill in any holes, i.e. the new rectangles would be covering space that the old rectangles didn't cover, which won't work.

Maybe I can explain this more fully. We are doing computationally-intensive processing of different regions of the plane. The order in which the regions get processed is unpredictable. We need to quickly, precisely and compactly answer the question: "which regions have been processed so far"?

Suppose you hire a guy to paint your wall. He's very anal (or, let's be modern about it, has Asperger's) and only ever paints in axis-parallel rectangles. He's easily distracted and liable to paint rectangles in arbitary locations, so the process doesn't proceed in any linear way, but he does cover the wall eventually. Paint is expensive, so you instruct him never to paint over the same area twice. Our problem is to efficiently answer the question, "What portions of the wall have been painted so far?"

Obviously we could just keep a list and add each new rectangle as it gets painted. But as the wall gets filled in, many painted areas will blend together. We'd like to keep the list as small as possible, i.e. we want the painted-so-far rectangles to be as large as possible. If we didn't care about that, we could just divide the wall into pixels and track the state of each.

It's not a disaster if we paint a few spots twice, but it's really bad to mark an area as painted if it hasn't been. That's why we can't ignore holes in the bounding polygon, i.e. space between painted rectangles. (Edit: actually no, it is bad if we paint the same spot twice. Imagine that the paint explodes if you do that. :))

The painting analogy can be extended to include color. In the original problem, we're painting the wall with a single color and all we care about is painted vs. not-painted. But if we introduce multiple colors, then we want to track not just "which areas are painted" but "which areas are painted blue and which areas are painted yellow". We still want to answer that question with as few rectangles as possible, but now we're not allowed to merge blue areas with yellow areas. That being said, a non-color solution would get us a long way.

NP complete problems are found everywhere in this space, no question about it. But there are also often useful results around approximations and heuristics. We don't need the optimal set, just small enough to make what we're doing fast.

Edit: the above also sheds light on why spatial indexing structures like R-trees don't work for this out of the box (though maybe they can be adapted to do so). These structures let you add rectangles and find them again. But they don't merge rectangles. If our painter takes a fancy to one-centimeter squares and decides to paint a thousand of them all in a row, an R-tree would end up with a thousand rectangles, even though the total painted area is a single n-by-1 rectangle at every step. Something like an R-tree with a "compaction" phase would be close to what we need, but maybe not close enough, because insertion into an R-tree is expensive.