I solved this completely by hand.
Here is a clean proof of its optimality. No computer is needed. Mere pencil and paper suffice.
Expand each pentomino by adding little right-angled isosceles triangles with area 1/4 as follows:
- For each (unit) cell with edge $A$ along its perimeter, add a little triangle with hypotenuse $A$ beside that cell.
- For each pair of adjacent cells with adjacent edges $A,B$ along its perimeter, add a little triangle beside both the triangles that had been added beside those cells at $A,B$.
- For the V-pentomino, add 2 more little triangles to completely fill in the region between the two arms of the "V".
Here is an example (with added triangles yellow in step 1 and green in step 2):
Observe that the number of little triangles added is at least the perimeter, regardless of the pentomino. The perimeter is at least 12 except for the P-pentomino, but the P-pentomino has 4 little triangles added in step 2. Except the X-pentomino, every other pentomino has at least 2 little triangles added in step 2. Thus the expanded X-pentomino has area $5+12/4 = 8$, and the expanded P,F,W-pentominos have area $5+14/4 = 8.5$, and every other pentomino has area at least $5+16/4 = 9$.
It is easy to see that, for any solution to the puzzle, the expanded pentominos will still not overlap. So if there are 9 distinct pentominos, then their total area is at least $8 + 8.5×3 + 9×5 = 78.5$.
Now expand the 8×8 board as well in the same manner, which adds 15 little triangles to each side. The expanded board has area $8×8 + 15 = 79$, but at least one of the added triangles next to each side of the board will not be covered, so the actual covered area is at most 78. Hence 9 distinct pentominos cannot fit.
In fact, we can show that 9 pentominos cannot fit even if each pentomino can be used 4 times! To see why, observe that each pentomino can only cover 6 units of the board perimeter, after which there is a gap of at least 1 unit before the next pentomino along the board perimeter. Let T be the expanded board area. Due to the gaps, not all of T can be covered by the pentominos. First, each isolated gap 'reduces' T by 1 unit. Two adjacent gaps 'reduces' T by at least 1.5 units (attained at the board corner). In general, $(k+1)$ adjacent gaps 'reduces' T by at least $(k+1)/2$ units. Thus the average reduction is at least 1/7 per board perimeter. Thus the gaps 'reduces' T by at least $\lceil32×1/7\rceil = 5$, so the covered expanded board area is at most $8×8 + 15 − 5 = 74$. But 9 pentominos (even with quadrupled pentominos) would have total area at least $8×4 + 8.5×5 = 74.5$. I presume that these bounds can be improved to show that 9 pentominos regardless of how many repeats cannot fit, but I did not bother to squeeze this last bit.
An equivalent counting method is to count the cell edges instead of area. Each pentomino already has 15 or 16 cell edges, and between each pair of adjacent cells along its perimeter we can add 1/2 edge sticking out, because that goes at most halfway to any other pentomino. In total we would get at least 17 edges per pentomino except 16 for the X-pentomino, which corresponds to 8.5 area for each pentomino except 8 for the X-pentomino.
The slight advantage of this counting is that it is easier to see where we are making losses. For instance, every untouched corner incurs a loss of at least 1 edge (i.e. 1/2×2), and this applies at the boundary as well, so we automatically know that we want to minimize the number of untouched corners. Also, every empty 2×2 square in the board incurs a loss of at least 2 edges, twice as bad as an untouched corner.
I initially did not mention this approach because the area equivalent is a bit easier to understand. However, I have decided to add it in, because it is much easier to write a program that uses this for a branch-and-bound search that counts the total edges plus the (necessary) losses so far. This makes it easy to prune most branches of the search. We even get a reasonable heuristic for branch-ordering, namely to first try placing the next pentomino to minimize the total edges+loss so far.