Maybe we can pass the dtype into `_validate_value` above to avoid copying twice if the requested dtype is different than the source dtype?  [Premature optimization, I know, but if we'd rather deal with it later, maybe add a TODO comment here or create an issue?]