For each of his fights, Giovanni has 1 Guard Spec for each of his Pokemon, which he will randomly use 25% of the time. The Guard Spec protects his Pokemon from having their stats lowered by status moves, so if you remembered that he used one before this happened, then this is normal behavior.
It's still possible for Leer to miss even if he didn't use any items, although it's unlikely to occur. In Gen 1, there is a bug that reduces the accuracy of every move by 1/256. This causes moves with 100 accuracy (like Leer) to effectively have a 99.6% hit rate, making it possible for the move to miss.
Every move has an accuracy value of some number between 0 and 255 inclusive, with 255 representing a move with 100 accuracy. The reason this bug happens is because the game determines whether a move lands by pseudorandomly generating a number between 0 and 255 and checking if it's strictly less than the move's accuracy value, instead of less than or equal to it. This means that if it generated 255, the move will always miss because 255 is not less than 255.
There is another separate issue with Leer where it has a 25% chance of failing if used by an opponent outside the Battle Tower, so you may notice that as well.
Source 1 / 2 / 3