I actually just fixed a similar problem where I was generating several copies of the same form with csrf protection. What was happening was that only the last form created had the correct csrf token.
The sloppy way to deal with this is to change the hop in the Zend library (in the Zend_Form_Element_Hash file) so that tokens don't expire after 1 refresh or page load. It's a really easy way to solve the problem but only works if you know how many times a page will load. This is the bandaid solution
The RIGHT way to do this is once the page has loaded do an ajax call to get a new refreshed token. Then using your javascript library (jquery is probably the simplest) and find ALL instances of the token and replace them all with the new one.
So in terms of code, it would look like this:
Controller:
$form->hash->initCsrfToken();
$this->view->hash = $form->hash->getValue();
In your js file (if you're using jquery)
$(.hash).replaceWith('HiddenHtmlPart1' . =hash . 'HiddenHtmlPart2');
The important part is for the selector to select ALL the hidden elements. Then you just need to replace the inside of the hidden element. The same idea applies to other js libraries although it would involve different methods.