Is it ever sane to use a Virtualized solution when performing I/O
heavy workloads?
Yep, very sane indeed, in fact for most organisations now virtual is the default and doing things on physical boxes is the very much the exception. We have over 100k VMs of all forms and many of them are >40k IOPS with no issue at all.
What are the best practices around this sort of stuff?
The key thing here isn't whether it's virtualised or not - it's understanding your IO needs well and matching the virtual storage resources. It's that simple, if you know what you need/want and have the budget to match that with your storage systems then the virtualisation layer really plays little or no part - unless you're REALLY pushing things of course (I'm talking tens/hundred of millions of IOPs).
What causes these problems, are there well known system bottlenecks,
or is just a question of excessive contention?
Lack of understanding or trying to do too much with too little storage resources, that's what normally causes people problems.