この話題はFuelPHP1.4に適応されます。

FuelPHPのPaginationClassは以下のように設定します。
$pagination = Pagination::forge('mypagination', array( 'pagination_url' => 'http://docs.fuelphp.com/', 'total_items' => 35, 'per_page' => 5, 'uri_segment' => 2, ));
※これは公式サイトのPagenation ClassのHow toに書いてある通りの設定です。

これを以下のように書くとちゃんと動きません。 
$pagination = Pagination::forge('mypagination', array( 'pagination_url' => 'http://docs.fuelphp.com/', 'uri_segment' => 2, 'total_items' => 35, 'per_page' => 5, ));
※これは公式サイトのPagenation Classforgeに書いてある通りの設定です。

違いは配列の順番です。
前者はuri_segmenttotal_itemsper_pageの上にあります。

後者の設定で $pagination->render()すると、5ページ目からおかしくなります。
$paginationをvar_dumpすると、5ページ目ですから、current_pageがint 5でなくてはいけないのに、float 4になってしまいます。

原因はpagination classにおいて、uri_segmentotal_itemsper_pageを内部変数にすべてセットしてからtotal_pagesを計算しなければいけないのに、_set関数で1つ値をセットするたびに_recalculate関数でtotal_pagesを計算してしまっていて、per_pageはpagination class内部においてデフォルトで10という値が設定されているのですが、total_pagesを10で計算してしまった結果、おかしくなっています。

ええと…修正方法ですがpagination classは後から値をセットするようにできていないので

\core\classes\pagination.php
public function __set($name, $value = null)
{
//中略 

// update the page counters
//$this->_recalculate(); ←ここをコメントアウト
}

public function __construct($config = array())
{
// update the instance default config with the data passed
foreach ($config as $key => $value)
{
$this->__set($key, $value);
}    
 
  $this->_recalculate(); ←これを追加
    


でいいかなと思います。
または、total_itemsを配列の一番先に書くのでもいいと思います。

もしかしたら1.5以降で直っているかもしれませんが、はまる方がいらっしゃるかもしれませんので、記録しておきます。