Why kpr() shows different content than var_dump()?
$download[1][6] and $download[2][6] are the exact same object (object(stdClass)#155), not just two objects with equal values. To avoid potential infinite recursion, Krumo (the k in kpr()) only display a single object once. The screenshot shows this, $download[2][6] is displayed as "∞ (Recursion)" because the object is already displayed (but collapsed in the screenshot) above as $download[1][6].

var_dump() does not have this limitation as it does not try to prevent infinite recursion.