Thanks for this great investigation, I wouldn't have known how to start decently with it. Now this is what I'm going to attempt.
Create a C# 4.5 library DosTerrainLibrary with following convenience methods
- void ReadTerrain(int width, int height, string filename)
Will read the terrain file into a memory data structure
- void WriteTerrain(string outputFileName)
Writes the memory data structure to a file
- void SetAltitudeAt(int x, int y, int min, int max, float height)
Sets a particular intersection of tiles to given float height (scaled with min and max to DOS scale)
- int CreateTextureLayer()
Creates a new texture layer at the bottom and returns it's index
- void RemoveTextureLayerAt(int index)
Removes a texture layer at given index
- Layer GetLayerAt(int index)
Returns a layer at given index
- void SetTriangleIntensityAt(int x, int y, Layer layer, single intensity)
Will set the layers intensity at x, y with given intensity
I might come up with more needed methods but for now this should do. Now mind you I'm a java developer so .NET is something I try to learn in my spare time. I'm not proficient in it in any way. So this might take me a decent amount of time to develop. I'll open source it ofcourse so anyone can pitch in or give advice

edit:
What I don't get though, is where is the type of texture stored ? You got the layers and intensity , but where is stored if it is rock, sand or whatever ?