Oh sorry, I've modified some of it in the mean time for testing, hence "(this version sets the texture beforehand but still the exact same behavior)". So I've tried storing the GLuint within the class so when I call draw it takes it from there but also tried sending it directly through the Draw function but none work.

To make it even more confusing when I remove the glBindTexture it works, I guess because the SOIL image loading library I use uses glBindTexture when loading in the image so it uses the latest texture I loaded.