На сохранение нового статуса лучше всего использов

На сохранение нового статуса лучше всего использовать расширяющий modObjectUpdateProcessor. Там в методе beforeSave() — самое удачное место для проверки изменения поля status. Но у вас реализация может и отличаться. В любом случае, вам надо перед сохранением не просто проверять поле status == 'готов', но и то, что значение было изменено, так как вы могли апдейтнуть строку и по другой причине, и если каждый раз надеяться только на значение статуса, то можно повторно отправить смс. В xPDOObject есть специальный метод — isDirty(), проверяющий, было ли изменено значение. Вот его и используйте.

if($object->isDirty('status') AND $object->status == 'готов'){
    $neadSendSMS = true;
    if($object->save()){
        // send sms
    }
}

Если у вас update-процессор, то в beforeSave() проверяете поле, а в afterSave() (что свидетельствует о том, что объект был сохранен) отправляете смс.