List<Pokemon> is the typename of the class. The container is a class called List. The < > are a sign that the List uses Generics. The type inside the brackets defines the type of class this List contains.
The consensus for the Windows defined types is, usually you DO NOT mix them.
Pass a BOOL to a BOOL etc. Don't assume, just because they sound samey, that they are the same. There's usually a reason why they added a new type instead of reusing an existing one.
You're throwing away a lot of advantages of a tile map.
IMHO: I always cringe when I see someone defining a tile class for a simple tile map.
For one, the indices of your tile array are all you need for positions. The tiles themselves don't need any, since you can deduce the position from the indices already.
Determining the tiles to draw is a simple calculation. With camera offset and screen size you can calculate the starting end ending indices of tiles on the screen.
Adding entities to tiles sounds good on a glance, but you already saw some disadvantages yourself. Also, when entities move you'll be constantly updating tile pointers. When an entity is on the move between tiles, which tile do you add it onto? Which tiles entities do you check for collision when an entity moves?
I'd put entities in a separate list, optionally a spatial container. This lets you reduce overdraw easily.
What's left for the tiles? Indices to the image. These could be stored directly, so you end up with a much simpler two dimensional array.
In my DX9 code I've offset the vector position by -0.5, -0.5 for all 2d textured rendering.
I recall having a few difficulties when the 2d rendering was performed not by pretransformed vertices (and ran through the matrices) In the worst case you may have to clamp the final coordinates to direct multiples of 0.5 (which can be tough when using matrices)
I see you're using shaders, I'm not sure if that makes a difference, I'm still using fixed function.