Are you sharing the server with others? The time some of those queries show they were running is pretty long. Some of those queries show they were running as long as 2 minutes. And mostly seem to be stuck in the opening/closing tables state.
If your sharing the server with others, you're somewhat handcuffed. What happens is, depending on their configuration, mysql can only have so many tables open at once. Once that limit is reached, then it has to wait for some other tables to close before it can open new ones. Until it can open them, they are going to be stuck in the Opening Tables state.
If they have it configured properly, then there should be a decent sized table_cache. This keeps a certain number of tables open. However, on a shared server those open tables are shared between everyone that's accessing the MySQL server. So, you're somewhat handcuffed if others are using the server fairly heavily as well.