We had a severity 1 bug come back from QA. It was reproducible 100% of the time. We're calling sfChat.ScrollToMessage from a Behavior every time the collection changes. The bug was that every 5th message sfChat wouldn't scroll - it would still show the 4th message.
The fix was simply to add:
await Task.Delay(25);
before calling sfChat.ScrollToMessage()
Just a tip in case anyone else is facing the same issue.