How can I set a custom ringtone for a contact when using Google Voice?
I would first test by adding a 1 to a number and having them call you.  Android should be smart enough to treat them identically but Google Voice might not play nicely.

I'm not sure of the specifics of how GVoice works, but keep in mind that your contacts are calling Google and Google is calling you.  Somehow they pass on your contact's number, but it's spoofed, and your phone is probably relying on the "real" number (i.e. Google's number) for choosing the ringtone.