It seems it's still using the value from the cookie and not respecting the n parameter passed....
maybe here? classes/controller/FrontController.php:
// Retrieve the current number of products per page (either the default, the GET parameter or the one in the cookie)
$this->n = $default_products_per_page;
if ((int)Tools::getValue('n') > 0 && in_array((int)Tools::getValue('n'), $nArray))
$this->n = (int)Tools::getValue('n');
elseif (isset($this->context->cookie->nb_item_per_page) && in_array($this->context->cookie->nb_item_per_page, $nArray))
$this->n = (int)$this->context->cookie->nb_item_per_page;
edit:
$nArray = array($default_products_per_page, $default_products_per_page * 2, $default_products_per_page * 5);
$this->n being in $nArray is pure luck, so changing
if ((int)Tools::getValue('n') > 0 && in_array((int)Tools::getValue('n'), $nArray))
to
if ((int)Tools::getValue('n') > 0 || in_array((int)Tools::getValue('n'), $nArray))
fixes the problem, but i'm not sure if it's the perfect solution.