rpm_count_bacup = rpm_count;
rpm_count is an int. Between the low order byte being copied and the high order by being copied, the value in rpm_count can change. This copy should only be done with interrupts disabled. Which means, of course, that it should NOT be done on every pass through loop.
Rpm = 60*1000000*rpm_count_bacup;
A nice int value...
timetemp = micros() - rpm_timeold;
if( timetemp >= 0 ) { //if micros not resetted (overflow every 70 minutes)
Your understanding of how subtraction involving unsigned values seems to be lacking. The value in timetemp can never be negative, so this test is unnecessary.
You are calculating Rpm far too often.