Другой подход заключается в использовании Scan и DistinctUnitChanged. Вот пример использования int для простоты
IObservable<int> xs;
xs.Scan((last,cur) => cur > last ? cur : last).DistinctUntilChanged()
и более общая форма
public static IObservable<T> IncreasingSubsequence<T>(this IObservable<T> xs, IComparer<T> comp)
{
return xs.Scan((last,cur) => comp.Compare(cur, last) == 1 ? cur : last)
.DistinctUntilChanged();
}