What you’re seeing is expected: when a Job doesn’t have a valid (geocoded) job address, the API can still return lat/lng, and those coordinates default to the account’s Office Location lat/lng.
That means it’s not uniform across ServiceM8 accounts, because the Office Location is set per account.
For integrations, the safest way to decide whether the coordinates are usable is geo_is_valid because if it’s false, the lat, lng, and other geo_ fields should not be used.
When an address is provided, ServiceM8 uses job_address for geocoding, and lat/lng are automatically populated based on that job address.