The VPS site has recently had big problems with 100% CPU Usage necessitating a reboot. I have been firefighting trying to keep the site alive and have not been able to pinpoint the problem. It could be Ubuntu updates conflicting with my script or corrupt imported XLS spreadsheets.
Hmm... some things to check.
1) Are you hemorrhaging PHP errors silently? If in top that usage is mostly IOWAIT it could be you're overflowing your logs and the system is hogging time whenever it has to compress and back them up. This bit a client of mine multiple times as their in-house guys kept screwing over their ancient copy of UBBThreads (ick) with "security code" that filled the logs to the "compress now" threshold every 8 hours, with logs so big they took an hour to compress them into .gz. Naturally after a couple days the machine started running out of disk space too. Eventually it was so utterly banjaxed I said screw it, wiped their forums, and moved them to SMF which didn't need all the bizzaroland patching they were trying to do (against my advice).
2) Excessive HTML -- particularly if you're doing realtime base64 of that image -- can cause a lot of server load.
3) Are you 100% sure you've got all the right fields indexed?
4) make sure those cron jobs are NOT all running the same time of day.
5) Could it be a RAM bottleneck? If going fulltext search I suggest at LEAST 2gb of RAM on your VPS plan.
6) Are you on MariaDB instead of mySQL? Oracle seems to be intentionally neutering mySQL by making it suck more CPU and memory than it used to for some vague "oh it'll be faster" -- no, no it isn't. Whilst MariaDB is a drop-in replacement fork that came about because the world doesn't trust Oracle not to screw it up (see OpenOffice vs. LibreOffice), the two are really starting to diverge from each-other now on the back-end.
One final thing you might try is a optimized fulltext engine like Sphinx:http://sphinxsearch.com/
I've added it to forum software before and it made a huge difference in performance both in terms of time/cpu use and looking for specific text. Never programmed for it directly, but it could be a possible solution to your load issues. It sits on top of / between your SQL engine and the server-side language making it fairly simple (from what I read in the docs) to add/implement.