Starting in the loop here:
unsigned long StartVoidLoopTime = millis();
Let's say the result from millis() is 2 seconds. The button is pressed for say 8 seconds, so you're in this loop for that long:
LastTimeButtonWasPressed = millis();
That means the last call to millis() will be 10 seconds (2 form when you started the loop + 8 in the loop).
if(StartVoidLoopTime - LastTimeButtonWasPressed >= interval) //if the total time - the start time is greater than 3 sec
So what is 2 - 10 seconds? In unsigned subtraction, it's a really big number, which will most certainly be bigger than 3 seconds. You should be subtracting LastTimeButtonWasPressed from the current time, not some time you set an arbitrarily amount of time ago.