I see this in this way:
By definiton, OutOfRangeException should be use to when potential problem is logical - occurs because of wrong code or definition. OutOfBoundsException is for runtime.
Example (see also note in "OutOfBoundsException class" article):
<?php
function prepareData(PDOStatement $s) {
$x = $s->fetch();
if (!isset($x['secretColumn']))
throw new OutOfRangeException ("Secret column doesn't exist! Verify table definition and query.");
}