This isn't shorter in the sense that there's less code, but it might run faster and it doesn't require writing out each condition.
BTW, you can make the code you posted run a bit faster by moving the test for '777' to the front of the list E.g., if ($list -contains '777' -and (($list -contains '50') -or . . .))
$ReferenceList = '50', '20', '60', '1', '2', '3', '4', 'any'
$ListToBeChecked = '0','3','6','9','12','15','18','21','24','27','30','33','36','39'
if ($ListToBeChecked -contains '777'){
$Pass = $False
}
Else{
$Pass = $false
ForEach($v in $ReferenceList){
if ($ListToBeChecked -contains $v){
$Pass = $true
break
}
}
}
$Pass