Nope, that's not it, thanks Glenn & Viper
In fact it seems that in J3.9 in both front-end and backend it is not necessary to have a populateState method in the listmodel - it is all done for you.
I think you'll find that if you delete your populateState method (or the bits of it to do with search and filtering and pagination) and also the associated protected variables it will all still work by the magic of Joomla.
The problem appears to be a difference between the front and back end handling of activeFilters which is used by the layout to check whether there is an active filter present and if it is to add the visible class to the div that wraps the filter layout - possibly.
I find the logic is confusing in the file layouts/joomla/searchtools/default.php which seems to use activeFilters in combination with some options to decide whether to display the filter bar our not.
The strange thing is if you simply override the code at line 98 in that file to make it so that div around the filter bar always has the "js-stools-container-filters-visible" class assigned which makes it visible then something else is adding an explict "style="display:none;" to the div after the form is rendered.
Most odd, it doesn't seem to happen in the backend - it must be inserted by a bit of javascript somewhere.
I can't find any example of a front end view that uses the searchtools filter bar and keeps it hidden until you press the search button if there is no filter set, but always displays it if there is a filter set.
Suggestions anyone?
RogerCO