To answer you question we need some guidance with your code and schematics.
The name 'current' for the sketch is confusing, 'current' is also an electrical current in ampere.
What about 'stable', 'development', 'latest', or something like that ?
Do you have a schematic ? I mean a real schematic made with Eagle or KiCad.
Do you power the AS5601 with 5V ?
Do you power the 7-segement display with 5V ?
Is there anything on the I2C bus that runs at 3.3V ? For example almost all sensors run at 3.3V.
Your test for I2C power with a digitalRead of SDA and SCL. That is okay, nothing wrong with that.
That means that the SDA or SCL level are still too low.
Check the 5V wiring.
You already have some delay in setup() before checking SDA and SCL. I think that delay should be enough.
Do you still use a breadboard ? They have often bad contacts. Solder everything or use the best quality connectors.
How long are the wires for SDA and SCL ? I mean the total length of every piece of wire for SDA and SCL. Keep it under 50 cm or lower the I2C speed with Wire.setClok(50000L);
Did you tie the SDA and SCL wires together ? They don't like each other (crosstalk).
Is Leo1 always the I2C Master and Leo2 always the I2C Slave ?
Does the Leo2 act as a Master to the display ? Is that a I2C display ? Then you would have a multi-master bus. That is yet unexplored territory. Don't be the first one who explores it, let others do that.
When requesting data from the Slave, you do not check if something was received. It is a Wire.requestFrom() followed by a I2C_ReadAnything. When sending data to the Slave, you don't check that either.
Check if the Wire.requestFrom() returns the same number of bytes that you requested.
Check the Wire.endTransmission() if it returns an error.
Is there something that turns off the interrupts ? For example in libraries.
The 'share_data' and 'gotData' variables are used in interrupts and in the loop(), therefor they must be made 'volatile'.
When reading or writing an element of 'share_data' in the loop, you have to turn off the interrupts (as short as possible). Since the Leonardo is a 8-bit chip, an interrupt may happen during reading a variable that is larger than one byte.
However, you don't have to turn off interrupts in the 'receiveEvent()' or 'requestEvent()', since interrupts are default not interrupted by other interrupts.
I'm only halfway investigating your code. There might be more. Don't be confused that it was getting worse. Such things happen. Perhaps the temperature changes or some minor other change. If you use a breadboard, it is most likely bad contacts. But at least add the 'volatile' keyword anyway.