I think there is no problem and you do not need to load the $model again.
Sequence is following:
_beforeSave()
save() //model in not saved!!!
_afterSAve() //model is still not saved!!!
on afterSave dispatching some events such as
Mage::dispatchEvent('model_save_after', array('object'=>$this));
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
commit() And only now magento save changes to database
So you evend don't need to use method _afterSave() you can use one of events with following check:
if ($observer->getObject instanceof My_Module_Model_Price) {
upd.1 You have some non logical things. For example you named method getPrice(). In this method you need to receive smth. In your case better use name: applyPriceRanges(). And code for this method is following:
$this->setData('current_price', $this->getSpecialPrice())->setData( /* .... */ )->save()
and in _afterSave() method or in observer try to do your changes with your object.