Here is a sample set of room patterns, with two varieties for each category. In a real application, of course, you might want more variety. In the past, I have used as many as 12 general-case selections for each category, though that many might not be necessary. Even 4 or 5 varieties provides a great deal of randomization in room selection.
Once you have the maze constructed, building the level is a simple matter. Each cell of the maze represents some arbitrary sized chunk of tiles in the tile map, in this case 15 as each piece in the above image is 15x15 tiles. Iterate the maze structure, obtain the edge pattern code for each cell, and lookup the correct patterns for the given edge code. Perform a rotation on the pattern as needed, and copy the pattern of tiles into the tile map. And voila, you have a maze that looks less like a standard maze and more like some sort of dungeon complex. (Of course, it needs more room randomization, as well as interesting things to put in the rooms).
Here is a sample maze:
And here is one possible variation using the above pieces:
Simplicity in and of itself, really. The technique uses no tricky math whatsoever, not complicated concepts. Just simple graph theory and some pattern copying, yet the results can be an extremely useful tool for your toolbox of random level generation stuff.
EDIT: I just realized I left out 2 pieces. Sorry, my bad. Got in a hurry with the copy/pasting. There are 2 additional pieces for patterns of 0 (no walls) representing 4-way intersections. Use your imagination to know what they look like.