I wrote a small rectangular map engine once with multiple layers, basically what I did was creating 3 map-arrays that had the same size and just draw the map 3 times in the correct order using transparency, so say you would want to draw some dirt on the grass you would put a grass tile on the map in array 1 and the dirt tile on the same position as the grass tile, only in array 2, this way the grass is drawn first, then the dirt tile is drawn over it...

You could however treat the some layers as sprites, meaning that you would simply have a list of map-objects that come with the map, so for example you want a grass tile with a tree on top of it, in this case the multilayer method described above isn't efficient since it could cause collision detection problems, in this case you could put the grass tiles in an arra and threat the tree as a sprite and just provide it with an X, Y and a Z value, the Z value indicates the layer it should be drawn at. With a tree and grass this is easy, you would for example say that the tree is in layer 2 (Z=2) and the grass will be the background (layer1). It becomes a hell of a lot more interesting with walls a unit or something could stand on, or a tree that is on some sort of flower bed, by using the first technique (the 3 arrays) you are limited to the number of arrays as your layers, by using sprites your have endless possibilities... A mixture of both could also be quite powerfull, you could for example draw dirt and a sky of clouds using the array method and trees and animals etc as sprites...