You are not storing the object returned by New-VM in a variable, and, yes, you have to use the variable where you define the tags instead of $tag.
$vm = New-VM -Name $ChosenName -Template $ChosenTemplate -OSCustomizationSpec $ChosenCustomization -Datastore $ChosenDatastore -Location $ChosenFolder -NetworkName $ChosenNetwork -VMHost $ChosenHost -ResourcePool $ChosenCluster
New-TagAssignment -Entity $vm -Tag $BackupTag
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference