It turned out to be a problem with the way we set up the virtual machine, rather than with MATLAB. We use Eucalyptus to manage the cloud and libvirt generates the virtual machine. In libvirt.xsl theres a way to change the model of the cpu. It defaults to the cpu with the most basic features. We changed the model to SandyBridge and it seems to allow svmtrain to use many more cores.
As a side note, I also found that increasing the kernelcachelimit on svmtrain significantly improved our training times.