If the user uses filtering, say in the example, searching for Unit Price 9, in this case, your ShouldApplySortFilterOrGroup() would return a true. That means maximumRows will be count of entire dataset. So, MyBusinessObjectCollection1.Select(0, 100000); would be very expensive.
I also noticed, that when filtering, items in pages in the bottom right of the grid doesnt display the correct item count.
Do you have another working example of server side paging which allows filtering?
The demo from the link is just one example showing one way of requesting data from the data layer, but it can be further customized as needed. Instead of returning all the rows when Filter/Sort/Group is applied, you can make the logic always return the same amount of data by changing the parameters in MyBusinessObjectCollection1.Select(startRowIndex, maximumRows); method.
Here is an example that uses custom paging, and will always return the same amount of data whether or not filter is applied.