I think you should change your search to
var result = m_client.Search<Observation>( param );
That way you search the Observations instead of the Patients and use the params object to constrain your search.
For the Epic server you should check their specification. Just like they do not let you search Patients with the 'name' parameter, I could imagine they restrict chained parameters like '
subject.name' as well. If that is the case, perhaps you will need multiple searches: one to get the Patient id based on the Patients given and family names, and one where you use that id to search for the Observations linked to that patient.
The _lastUpdated parameter is of type date, which means you can use this format to specify it: yyyy-mm-ddThh:mm:ss[Z|(+|-)hh:mm] (the standard XML format). So yes, if you could store the last time you performed the search, you can specify a more precise date/time later on.
The only other thing I can think of to limit the number of Observations, is to add the _sort:desc parameter to sort based on _lastUpdated date, plus perhaps use _count to limit the number of Observations returned. NB: you will miss out on some of the results, but from your comments my interpretation is that you do not need the complete set of Observations.
If you need more complex search functionality, for example to get back 1 Observation for every hourly period, you will have to implement a named query on the server side (only possible if you have control over the server yourself, so not on Spark or Epic sandbox), or perform multiple searches client side.