AVR MCU running @ 32.7Khz Low speed LED multiplexing problem interrupt
For starters all those /10 and %10 calculations every loop are going to take a lot of clock cycles - probably several hundred if not a thousand. You are doing six of those each loop, so that is probably several thousand cycles every loop for each segment to be lit. 

If you clock is only 32kHz, then each digit takes a sixteenth of a second to display. But because you have no synchronisation between your digit display and the interrupt that it toggling which digit to light, then if that interrupt is firing too fast the display counter will increase multiple times before a single digit can be displayed (thus skipping digits).



Each loop you appear to be calculating the value for every display segment, and then only using one of them - which is incredibly inefficient - you basically calculate the value for each digit four times for each one time it is shown.



Furthermore, you have issues of atomic access. Your interrupt is changing 16bit values which you are also trying to do calculations with in the loop - that means that an interrupt could occur and change the 16bit variable when you are half way through accessing it (thus corrupting the data).



I really don't know why you are using interrupts at all here, especially with such a low clock frequency. If you simply add the counter++ line to the end of the loop, and move the calculations for d1 to d4 inside their corresponding if statements, then it will probably start displaying properly - the time it takes to do the calculations will be enough for the digit to be displayed for a long enough period of time for you to see it.