Can I check a file's properties before saving it with system_retrieve_file?
It depends on what the file "properties" you're wanting to check here. 

The file contents? Sure. You can invoke $result = drupal_http_request($url);(7) or \Drupal::httpClient()-&gt;get($url)-&gt;getBody();(8) ahead of time to inspect the HTTP contents before calling system_retrieve_file(). 

The file entity properties (or the temporary file created before moving to $destination)? No (without replicating/modifying some core functionality). There are no open hooks to that before system_retrieve_file() commits to saving that data to filesystem/DB.