The tail command is going to block the pipeline as long as it's running. One option is to run the tail in a background job, and process the results in your main script in an endless loop:
$Job = Start-Job -ScriptBlock { tail.exe -f \\server\file.log }
While ($true){
Recieve-Job $Job |
Where-Object { $_ -match "criteria" }
Start-Sleep -Seconds 10
}