I think I found the other code you said you tried ( I re-read your first post in this thread... ) , one of the libraries of Rob Tillaart. He's a genius so I am sure he knows what he is doing.
Did you realise, the test program there tries to read a DHT21 and a DHT22 in the same sketch ? It might be, it was reading the DHT22 and getting the error on the DHT21, because you weren't using a DHT21... I'd try it again. If you get the same poor outcome, it would increase the confidence in the conclusion that maybe your device is just defective.