Perhaps a key thing to having the grid scroll more predictably is setting Width for the columns. Without the width, the browser decides how wide a column will be, and the narrower the <table> that's holding it, the more different the behavior can be, as it can depend on CSS, and on the contents of the cells. The grid itself (and the <table> it uses) are block elements and take the available width in their parent element unless something else is specified (like width on the column, or other CSS rules).
On the provided sorting scenario - indeed, the case is the same as the page I linked above - the nested classes and fields are not something the grid can know about. For the built-in operations to work, the model (in this example the Item class) needs to be a flattened list of primitive fields that can be sorted. Alternatively, the classes that represent columns must implement their own sorting.
That said, I think they key issue for the missing Member value is that the Field property of the column is not set. Without it, the column does not know to which field (member) of the data source it is bound, and so it cannot pass this information along to the data source. I'd suggest hardcoding a string in the Field property of the columns as a start to see if it will come up in OnRead. If so, you can then proceed to take it from ViewColumn.FieldName.
This bring me to the feature request - indeed, the ability to set the sort direction would be useful for such cases, especially when you already implement the sort operation through OnRead.
As for the pager numbers - I have logged it for fixing and you can Follow its status here: https://feedback.telerik.com/blazor/1411728-pager-items-appearance-is-unclear-with-page-numbers-1000. The page also contains a workaround which I am pasting below too.
/* The workaround */
.k-pager-wrap.k-grid-pager .k-link, .k-pager-wrap.k-grid-pager .k-state-selected
Progress Telerik UI for Blazor