I HAVE SOLVED THE PROBLEM!!!
I think you have a 12 bit remote.
For example, you hold down a button and you get three commands of 12 bits. The first 12 bits will be stored and then the program will wait. Then the second command comes in and you get 21 bits of information and 3 bits which are trashed. Finally the third command comes and fills up 12 bits of storage, so when you press another (4th command) button you end up getting the first 6 bits of the 3rd command in the variable ir_string. The 4th command is trashed.
If you have a 12 bit IR command then change the ir_bit_seq limit from 21 to 12.
Let me know if this is the solution.
ps: I believe delayMicroseconds() works in interrupt routines, unlike delay().