After a frustrating few hours debugging code I made a decision to step back a version and try to just implement the integration aspect and use only positions for the models.
Once I had made this decision the code simply fell into place, there was one small hiccup with the pass description but apart from that it all managed to go smoothly. Below is a video of the Instancing which now works using XML to specify which meshes will be instanced. This means that creating large scale environments with many simple models will be a breeze.
1. have a separate list for instanced entities that don't need updating or iterating through.
2. put up with it and accept that 20,000 models is a reasonable amount and still be able to have update functions for these instances.
I'm still undecided on which I will stick with, or I may even do both and use the appropriate one for the situation i.e. if there are lots of stationery objects such as plants, trees, shrubs then use the non-update version and then other for when entity interaction is necessary.
Anyway back to work :)