I put my comment as an answer because my assumption was correct. Since your image is a .png image, it may contain transparent pixels. As you can see from your example, your code does not work. When I hover over the image, I guessed that the white elements of your image are actually transparent.
What I did was just copy the image into an MS mask and save it as a .jpg . As a result of this, since the jpg format does not support transparent pixels, there are no more transparent pixels. Thus, this should overcome the inversion problem.
Now, when you run your code, you see that it works flawlessly.
img:hover { -webkit-filter: grayscale(1) invert(1); filter: grayscale(1) invert(1); }
<img src="http://oi64.tinypic.com/6tibys.jpg">
So, the only thing you need to do: open the image editor and fill these βwhiteβ bodies with white color. Exterior parts may remain transparent. This will fix the problem, I think.
source share