Does it work if you create the filter scriptblock using an expandable string?
foreach ($Item in @(Import-Csv -Path "ranks.csv")) {
$Rank = $Item.Rank
$filter = [scriptblock]::create("(RecipientType -eq 'UserMailbox') -and (Title -eq '$Rank') -and (Company -eq 'Company')")
Set-DynamicDistributionGroup -Identity "$Rank" -DisplayName "$Rank (NC)" -Name "$Rank (NC)" -RecipientFilter $filter
}