В своё время решал ровно такую же задачу примерно следующим образом:
Данные с датчика уровня топлива сглаживались тривиальным скользящим средним, а затем дифференцировались.
Заправка фиксировалась при выполнении следующих условий:
1. Машина стоит.
2. Скорость увеличения уровня топлива превышает определённую величину.
Слив фиксировался при выполнении следующих условий:
1. Машина стоит.
2. Расход топлива за время стоянки (с учётом фактического времени работы двигателя) превышает нормативный расход холостого хода на определённую величину.
"Определённые величины" и параметры сглаживания подбирались экспериментально для каждого типа датчика уровня топлива.
Науки было не много

, но заправки/сливы, определялись практически без ошибок.