Beyond Natural Language Perplexity: Detecting Dead Code Poisoning in Code Generation Datasets