This does not have anything to do with cookies, this is what happends:
1. Visitor goes to page 4/6 wich shows products 40-50 (10 per page)
2. When visitor changes products per page from 10 to 30, he will still be at page 4, when there are only 2 pages (60 products / 30 = 2 pages)
This creates the 404.
To resolve this you can also add this above the form:
global $wp_query;
$cat = $wp_query->get_queried_object();
$action = ""; // default to current page
if( isset( $cat->term_id ) )
$action = get_term_link( (int)$cat->term_id, "product_cat" );
You should add this just BEFORE the form, and set the action
<form action="<?php echo $action; ?>" method="POST" name="results">
(Hope its flawless, did just type it here)
Hope this helps!
Edit: I did make a plugin to add the ‘Product per page’ dropdown, this is not yet resolved in it, but I will put it on my ToDo list. (http://wordpress.org/plugins/woocommerce-products-per-page/)