I believe the root cause of this contribution is a design problem in the collection: it doesn’t encapsulate DB-select object and in most cases adding a filter/limitation through collection API would modify the select object instantly.
Often if you call this method (that modifies select object) twice, there is a crash hazard – and that’s the most common problem that observers have when they touch collections.

So the solution for this design problem is this:
* Don’t allow access DB select object through collection API
* Refactor collections in such a way that any filter or limitation methods would alter collection object state, rather than DB-select. Utilize lazy load pattern to not only load data, but actually create and prepare SQL-query at the last possible moment.

A simplistic solution could be illustrated in:
`Mage_Catalog_Model_Resource_Product_Link_Product_Collection::_beforeLoad()`
`Mage_Paypal_Model_Resource_Payment_Transaction_Collection::_beforeLoad()`

In both cases whenever a filter is set, it just records a variable value to the state of collection object, however doesn't mess with DB select until the last moment. Which allows setting/changing filter multiple times before loading.