I'll apologise now if this turns into a bit of an essay! And these are only my views and experiences, they may not work for everyone and I'm sure there's plenty of other methods out there, but hopefully some of it makes sense.
Having a big breathold whilst doing nothing and having one whilst exerting a lot of energy are 2 different things. Sure they both help each other in some way and both can be improved by training.
Most people find that after a spearfishing their breathold in the pool seems to have improved. This is probably due to the fact that your body and mind have spent a lot of time doing it whilst diving that they are attuned to what your body is capable of.
There are a combination of things that contribute to a good breathold. One is a high level of fitness and VO2 max. This means that your body is making the most out of the O2 that is available to it.
Another is knowing your body and it's limitations. This is done through training, using both static breathold and dynamic breathold. Everyone's body has a trigger that tells it when it should breathe which has a very large safety margin built into it. Learning to ignore that trigger and what your body is actually capable is what it is all about.
The training for this is done using small steps. Static breathold, above or below water, should start with short bretholds and slowly increase. This one's all about relaxing and trying to lower your heart rate and find what you are cabaple of and what you are comfortable with. If you are really comfotable maybe you can go for the record. It's only 9:04 minutes!
Dynamic breathold is much the same. Start with nice slow 25m breatholds and do 10 of them taking as much time in between each so that when you start each one you feel the same as when you started the first one (ie no elevated HR or lactic build up). Build this distance up thru 37.5m, 50m, 75m, 100m. It's the same as any sport, you need to warm up properly before going too hard, or in this case too long.
Once you've got the long slow ones sorted you should increase some intensity so that you are simulating hockey. Shorten your rest in between breatholds so you are stressing your body and having to use all available O2 to feed your muscles. You should get to a stage where you can, for example, do 10 x 50m breatholds with as short as possible a break between each one.
Just make sure if you are doing any of this sort of thing don't do it alone, have someone keeping an eye on you, especially anything over 50m as when you're pushing the limits shallow water blackout isn't far away a lot of the time. It's about knowing how close you can safely come to it!
A combination of all this sort of thing should increase your breathold. There's some more interesting reading at
http://en.wikipedia.org/wiki/Free-diving#Training