The trick part is representing the different types of tiles. Here, I have the tiles referred to by a type-field. But then we need a bunch of switch statements to give different tile behaviors based on different types of tiles. Would it be better to use multiple types of LevelTile (i.e. derived classes)?
What kinds of different behaviors are you referring to? It sounds like inheritance would complicate things in this case. Typically each cell of a map would contain an index (or key) into a seperate array (or dictionary) of tile info objects, each of which would store stateless data (such as texture, walkable flag, etc.). Each cell can also contain state data, which is not tied to specific tiles but to each cell. This looks like how you may have things set up, but I'm not sure why you think you will need a bunch of switch statements. For rendering? Animation? Checking collision? All these things can be handled fairly easily by just storing the correct data for each tile type, you shouldn't need switch statements for that.
The switch statements would be needed when associating functions with tile types. E.g. a function to be executed on whatever creature moves across the tile.
And doesn't that dictionary have to be a ... gasp ... global?!