Attiny85 I2C without using USI interrupts.

Hello guys
I am struggling with my ATtiny 85 quite a bit. I tried to remake a TinyWireS not to use interrupts. My plan was to do all the communication in the main loop, continuously checking the Start condition flag and Overflow flag using if().
The problem is that I need use time interrupts to set some I/Os in precise time for servos. If I use only Timer0 Overflow interrupt it can detect the Start condition repeatedly, sending signal from Arduino every 3 seconds with Wire library, it doesn’t get stuck. However, if I use time compare match interrupt (without anything in it) it gets stuck and Arduino waits. If I restart ATtiny it sends one byte, flag is set, if is entered and then it stucks again. It seems that ATtiny keeps the CLK line low and doesn’t leave if(). I don’t understand why if nothing change except the empty ISR (I clear the flag at the end of if()).
Why Overflow interrupt can be use and Compare match interrupt not?

I will be glad for every advice, I read through whole datasheet and haven’t found anything. I makes me crazy. The code is below (It is almost exactly the copy od TinyWireS)

//check if there is a flag
  if(USISR & 0b10000000){ 
    
    // set default starting conditions for new TWI package     
    overflowState = USI_SLAVE_CHECK_ADDRESS;
  
    // set SDA as input
    DDR_USI &= ~( 1 << PORT_USI_SDA );
      
    // wait for SCL to go low to ensure the Start Condition has completed (the
    // start detector will hold SCL low ) - if a Stop Condition arises then leave
    // the interrupt to prevent waiting forever - don't use USISR to test for Stop
    // Condition as in Application Note AVR312 because the Stop Condition Flag is
    // going to be set from the last TWI sequence
    
    while (
         // SCL his high
         ( PIN_USI & ( 1 << PIN_USI_SCL ) ) &&
         // and SDA is low
         !( ( PIN_USI & ( 1 << PIN_USI_SDA ) ) )         
    );
  
    PORTB ^= (1<<PINB4);   \\change LED status to be sure of entering the if()
    if ( !( PIN_USI & ( 1 << PIN_USI_SDA ) ) )
    {
      // a Stop Condition did not occur
      USICR =
           // set USI in Two-wire mode, hold SCL low on USI Counter overflow
           ( 1 << USIWM1 ) | ( 1 << USIWM0 ) |
           // Shift Register Clock Source = External, positive edge
           // 4-Bit Counter Source = external, both edges
           ( 1 << USICS1 ) | ( 0 << USICS0 ) | ( 0 << USICLK ) |
           // no toggle clock-port pin
           ( 0 << USITC );
  
    }
    else
    {     
      // a Stop Condition did occur
      USICR =           
           // set USI in Two-wire mode, no USI Counter overflow hold
           ( 1 << USIWM1 ) | ( 0 << USIWM0 ) |
           // Shift Register Clock Source = external, positive edge
           // 4-Bit Counter Source = external, both edges
           ( 1 << USICS1 ) | ( 0 << USICS0 ) | ( 0 << USICLK ) |
           // no toggle clock-port pin
           ( 0 << USITC );
  
    } // end if
    
    USISR =
         // clear interrupt flags - resetting the Start Condition Flag will
         // release SCL
         ( 1 << USI_START_COND_INT ) | ( 0 << USIOIF ) |
         ( 1 << USIPF ) |( 1 << USIDC ) |
         // set USI to sample 8 bits (count 16 external SCL pin toggles)
         ( 0x0 << USICNT0);
    
  }//end start condition

.... uh, why can't you use the interrupts for TWI?

Because servos are shaking if the sending signal is constant and if they are moving they make some unpredictable jumps (about 5 degrees or so). I have 4 slaves (will have 10) driven by a myster connected on one line, so even with 400kHz there are sometimes longer delays.