The reason is because when you call
getFirstItem() (or just about any other retrieval method) on a collection that collection is loaded. Any subsequent operation ignores the database and uses only the loaded data, filters have no effect because they are SQL only, ditto for pagination and selected columns. The workaround is to use a second collection based on the first.
$secondCollection = clone $firstCollection;
$_foo123 = $secondCollection->getFirstItem();
clear() method unloads the data for that collection, forcing it to access the database again next time.