Usually the reason is either because some jerks intentionally changed certain spellings to look more French (“receipt” didn’t have a “p” originally, for example), or just because English is such a mongrel language with words taken from various other languages with different spelling and pronunciation rules.