How can I tell if the current request is for a backend or frontend page? This check will be done inside an observer, so I do have access to the request object if that helps
Have a look at the methods inside Mage/Core/Model/Store.php you'll want to use:
Mage/Core/Model/Store.php
Mage::app()->getStore()->isAdmin()
In conjunction with
Mage::getDesign()->getArea() == 'adminhtml'
To act as a fallback where the store ID isn't set as you expect (Magento connect etc.)