Also I recommend using visual studio 2012 and compiling offline. My solution used to take 15 seconds to load because it compiled the shaders at run-time. I didn't have that many shaders. I switched to offline compiling and the screen comes up in under a second. It's huge for productivity. And according to some guy I'm not going to cite there's no real advantage to compiling at run-time since it increases loading by so much.
You don't rotate billboards. Billboards always face the camera because they are just 2-D sprites. The only matrix you need to store per instance in your instance buffer is the world matrix. This matrix will have the position and scale of the billboards, such that the further it is the smaller it gets.
Someone else can chime in with the max size of the instance buffer. I just guessed 128 for now.
Any time I need to render a batch of instanced models I call UpdateSubresource() with my new instance buffer and then DrawInstanced(). For drawing thousands of models I would probably have multiple DrawInstanced() calls, but I don't know if there is a better way.
You can lay out your CUSTOMVERTEX however you want but I am assuming that the first 4 floats correspond to the position as a float4(x,y,z,w) and the last integer is a vertex color 0xRRGGBBAA for red, green, blue and transparency. In the first one it is probably the color teal.
Your input layout determines all of these (D3D11_INPUT_ELEMENT_DESC).
If you aren't blending textures then the easiest way is to combine the textures into one. You would have to recompute your texture coordinates.
Otherwise you need an index per-vertex telling you which texture to use in the pixel shader. You can add a uint to the input and output of your vertex shader. Your vertex buffer will need to specify the integer index of the texture for each vertex. The vertex shader will just pass the integer through to the pixel shader. Then change your Texture2D to an array like Texture2D mTexture : register(t0); and call mTexture[input.index].Sample().
If you are doing something like terrain where you want to blend multiple textures then you just need multiple texture coordinates.
If you are trying to cast a large shadow from a small object onto terrain you should be using a directional light (orthographic) since you are imitating the sun. Orthographic projections do not depend on distance so you can make the shadow map perfectly centered around the caster even if it is infinitely far away.