is there a 'correct' spelling of his name?
In practice, no one spelling of the Ukrainian president's name in English is treated by all as the single 'correct' spelling. You'll need to make a choice between them using your own judgement. The good news is that it doesn't seem to be a fraught issue: I can't find evidence that anyone cares very much about which spelling is used. As you've already observed, different mainstream English news sources use different spellings.
Apparently, "Zelenskyy" is what appears in his passport (Ukrainian passports are in Ukrainian and English). So I guess that makes it the official English spelling of his name in a legal sense.
However, the official status of this spelling doesn't seem to have much if any significance in terms of how to refer to the president as a public figure.
The following tweet from BBC correspondent Jonah Fisher gives what may be a common reason for not using the single Y spelling:
I don’t think we (BBC) are going to go for the double - Y - it just confuses our audience.
7:07 AM · Jun 10, 2019
Iuliia Mendel, then press secretary in Zelensky's administration, replied as follows:
Dear colleagues, this is the official form of the last name that the President has in his passport. This was decided by the passport service of Ukraine. The President won’t be offended if BBC standards assume different transliteration
7:13 AM · Jun 10, 2019
These tweeets are quoted in "How many Y’s are in Volodymyr Zelensky(y)’s name?", by Hanna Kozlowska (Quartz, September 25, 2019) who writes:
There’s seemingly no political implication to the spelling, unlike the differences between “Kyiv” and “Kiev” and “Ukraine” and “The Ukraine.”
The reason for the spelling with -yy
The spelling in the Cyrillic alphabet is Зеленський; -yy is a transliteration of the last two letters.
The transliteration of й
The final letter, й, represents the palatal glide /j/ in Ukrainian as well as in other languages written in the Cyrillic alphabet. The same sound (more or less) occurs in English, as in the start of the word yellow, but English does not allow it to occur at the ends of words. (Alternatively, if English diphthongs such as the /aɪ/ sound of eye or the /oɪ/ sound of boy are interpreted as ending in /j/, English only allows /j/ to come at the end of a word after a few specific vowel sounds.)
Although "y" is a natural way to represent this sound for an English speaker, it can also be represented as "i". In fact, from what I can tell, in the Ukrainian National system (as presented by Wikipedia) the word-final transliteration of "й" ought to be "i". That would give the romanization "Zelenskyi". I'm not sure why this wasn't used for his passport. "Zelenskyi" seems to occur in some news sources, but not as often as "Zelensky", "Zelenskyy" or ""Zelenskiy".
The transliteration of и
The second-to-last letter, и, represents a vowel sound. The letter и is used differently in Ukrainian and Russian. In some cases, this may be relevant to the social implications of how to render it in the Latin alphabet. But in the case of Zelensky's name, it doesn't seem to matter.
The Ukrainian alphabet has three letters representing "i-like" vowel sounds: І-і, Ї-ї and И-и. There's also Й-й, which represents the corresponding consonant/semivowel /j/.
Ї-ї represents a semivowel-vowel sequence /ji/, І-і represents /i/, and И-и represents /ɪ/. (There is an additional complication in how these letters affect palatalization of preceding consonants—І-і can cause palatalization, И-и can't.)
Since І-і and И-и represent different vowel sounds of Ukrainian, it may be thought useful to differentiate them in a transliteration. There's no incredibly obvious way to represent a distinction between the vowel sounds /i/ and /ɪ/ in the Latin alphabet, but using I and Y respectively is a somewhat sensible choice, although when Y is also used for /j/, this creates an unfortunate collision between the representations of /j/ and /ɪ/.
The Russian alphabet does not use the letter І-і. In Russian, И-и represents [i] (except for when it's predictably replaced by [ɨ] after some consonants). So the letter sequence "ки" is regularly transliterated as "ki" when it occurs in Russian, as in Киев, transliterated Kiev, while the same letter sequence in the Ukrainian name Київ is typically transliterated as "ky", giving us the spelling "Kyiv" (which has become increasingly preferred in recent English sources).
You can find some discussion of phonetics of the Ukrainian и sound in the Language Log article "Pronouncing Kiev / Kyiv" (Mark Liberman, November 16, 2019 @ 3:28 pm).
Note that this features a quotation that has a Latin-alphabet transcription of the similar name Зілинський as "Zilyns'kyj".
It looks like the spelling "Zelenskiy" has been used for his Instagram. The use of this transliteration is not too surprising given that his first language is Russian (like many Ukrainians) and that, as Peter Shor said in a comment, there is no single transliteration system for Ukrainian in any case (so "Zelenskiy" might plausibly be used to represent the Ukrainian as well as the Russian pronunciation of the name).
The spelling with single -y
Despite the above, the spelling "Zelensky" with a single Y is common. I think this is most likely due to anglicization: many English words end in a single -y, such as happy, very, sunny, while it's alien to the English language for a word to end in a double -yy sequence. (The sequence -iy at the end of a word is equally alien to English eyes, and it's likewise common to use single -y in English spellings of Russian names that end in -ий, such as Dmitry for Дмитрий.)
While Zelenskyy is somewhat closer to being a letter-by-letter transliteration of Cyrillic Зеленський (it isn't fully letter-by-letter, as it doesn't transcribe the soft sign ь and it doesn't differentiate the distinct Cyrillic letters и and й), it doesn't do any better than Zelensky at indicating the pronunciation of the name to an English speaker.