You can read the text as single multiline string and break it down into blocks on the empty line. Then do a simple regex to catch the string you want and get the Count property of the number of blocks that matched.
$colorToCount = 'Black'
((Get-Content -Path 'D:\Test\colors.txt' -Raw) -split '(\r?\n){2,}' |
Where-Object { $_ -match "(?m)^Color:\s*$colorToCount" }).Count
will return 2 using your example file.
If what you intend is to first create an array of objects from this text, you can do this:
# create an array of objects from the file
$data = (Get-Content -Path 'D:\Test\colors.txt' -Raw) -split '(\r?\n){2,}' |
Where-Object { $_ -match '\S' } | ForEach-Object {
[PsCustomObject]($_ -replace ':', '=' | ConvertFrom-StringData)
}
# now get the count of objects with the wanted color
$colorToCount = 'Black'
($data | Where-Object { $_.Color -eq $colorToCount }).Count