I've ended up solving this problem myself using the Microsoft.Entra Powershell module instead. Which suggests there's either a problem with the graph powershell module or its documentation.
The below worked fine using Microsoft.Entra.Signins module:
#Create policy
Import-Module Microsoft.Entra.Signins
$conditions = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessConditionSet
$conditions.Applications = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessApplicationCondition
$conditions.Applications.IncludeApplications = "All"
$conditions.Users = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessUserCondition
$conditions.Users.IncludeUsers = "All"
$conditions.Users.ExcludeGroups = @($GuestGroup.Id,$RoamingGroup.Id)
$conditions.Locations = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessLocationCondition
$conditions.Locations.IncludeLocations = "All"
$conditions.Locations.ExcludeLocations = $AusLocation.Id
$conditions.ClientAppTypes = @("ExchangeActiveSync","Browser","MobileAppsAndDesktopClients","Other")
$controls = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessGrantControls
$controls._Operator = "OR"
$controls.BuiltInControls = "Block"
New-EntraConditionalAccessPolicy -DisplayName "International Roaming" -State "enabled" -Conditions $conditions -GrantControls $controls