Button doesn't control 2812 strip correctly

Look at the following conditional:

if (digitalRead(Button) == LOW && millis() - ButtonTime > ButtonDelay)

It basically says "If the button IS pressed AND 500ms has passed then..."

This is why you have to hold the button down.