I can't see a reason to worry about this - you have an idiomatic solution. An empty buffer is information, so it's reasonable for the framework implementation to return it. Any other method would effectively be doing the same thing you are internally anyway.
When I find myself using small groups of standard operators I often wrap them in a more explanatory extension method. E.g.:
public static class ObservableExtensions
{
public static IObservable<IList<T>> ToNonEmptyBuffers<T>(
this IObservable<T> source,
TimeSpan timespan,
int count,
IScheduler scheduler = null)
{
scheduler = scheduler ?? Scheduler.Default;
return source.Buffer(timespan, count, scheduler ?? Scheduler.Default)
.Where(buffer => buffer.Count > 0);
}
}
Allowing:
sequence.ToNonEmptyBuffers(TimeSpan.FromSeconds(5), 1);