There are 14 layers, each one is 128 units high.
I am not sure if the number 14 is actually hardcoded, or if the game dynamically calculates it based on the values from one of the ini files that defines the min/max height of cliffs (don't remember which, check eejin's wiki page).
In addition, each tile has its own ground height, which is in the range [-2048, 2047.8], however as you can clearly tell, those are NOT the numbers you supply.
As far as I can tell with experimenting, there are two possibilities - the ground height is a 14bit number, or the logic handling it acts like a 14bit number.
With that in mind, the range is [0, 0x4000], and 0x2000 is indeed "ground zero".
To map that to the real range, you'd need a division by 4, and subtracting 2048.
I don't know what's the deal with the maximum being 2047.8, probably that 0.2 gets lost in some division + conversion to floats?
In addition, for some reason WE adds -256 to all heights, probably because of said min/max height cliff numbers, and indeed uses it also for doodad/unit placements, so don't get confused by that.
For example, make a new map at layer 0, and check the Z coordinate anywhere with your mouse.
I don't know what the game itself reports, e.g. via Jass, because no one would make a test map for me
The final height of a tile point follows something along the lines of
C:
height = (groundHeight14Bits / 4) - 2048 - 256 + layer * 128
// groundHeight14Bits is in the range [0, 0x4000]
// groundHeight14Bits / 4 gives us the range [0, 0x1000]
// -2048 to get [-2048, 2048]
// -256 for the base cliff level or whatever it is
// layer * 128 is self explanatory
So how to use this? let's say you want some height N.
Take 0x2000, and add N*4 to it.
For example, height 25 (same as raising the ground 4 times in WE) is 0x2000+100.
Note that none of this is in eejin's specs yet.
All of this follows suit with the fact that the water level is also not a 16bit integer - we know there is a boundary flag at the 15th bit.
It might very well be that there are 3 more flags we don't know about. Or not. Who knows.
As a side note, a lot of this is untestable directly in vanila WE, as it has all sorts of constraints.
For example, it seems to enforce a maximum relative height of 150 between neighboring tiles, it seems to enforce a maximum final height based on only the cliff max height (14*128), and all sorts of other such things.
It will still gladly load a map that doesn't use these constraints, but don't think about editing the terrain in vanila WE, because it will ruin your terrain by moving it in funny ways to match these constraints