What constitutes a double negative is in theory quite simple: it is any pair of negative words that modify the same sentence or clause.
The only problem is which words to count as negatives. Words like never, hardly, unpleasant, and immoral are commonly considered negatives. (Whether you consider the whole word unpleasant a negative or just the prefix un- would not seem a very interesting question.) Other words are disputed, like bad, atheist, and reject.
In some cases the words any, ever, and either can be added as a test, because it is used when a speaker has something negative at the back of his mind, as opposed to neutral some:
There's hardly any fungus left. What am I to eat now?
? There's hardly some fungus left. What am I to eat now?
The first sentence is vastly more common, because hardly is normally a negative. But this test doesn't always work (how to apply it to immoral?), and so we cannot use it to establish clear boundaries.
She rejected any proposal he dared show her.
She rejected this proposal he dared show her.
It seems reject is a negative when used with any, but not so with other words.
However that may be, it is usually not important whether we call two words "double negatives" or just a negative and some other word: in both cases there can be litotes, as long as the first word changes the meaning of them both into the opposite of the second word:
- Not bad is the opposite of good.
- That building is not very high: this indicates the opposite, low.
It is a candidate for litotes as long as both words together immediately conjure up another word (good) that is the opposite of the second word (bad). This is not the case with any word at random:
- This book is not yellow: then what is it? Blue? Magenta?
But in certain situations, where yellow and not yellow are the only two relevant categories, they may even constitute litotes too.
Shh, don't ever mention her hair. She is only thirty; but it is, you know, not black, despite appearances.