Yes, they are different. The first means you expected something to happen, the second doesn't.
'I might have known' means 'That doesn't surprise me in the least!. The expression is something of an anomaly in that doesn't correspond to any similar constructions, and you can't really analyse its constituent parts. Or in other words, you have to accept it as it is - as a colloquial exclamation and set phrase. Here's an example. Let's say somebody in your household forgot to close the window, and the rain came in overnight and soaked everything. Everyone in the family is generally very careful, with the exception of your little brother, who is careless and forgetful. You make a few enquiries, and find out that your brother was indeed the last person up last night and it was he who forgot to close the window. Then you'd say 'I might have known'.
'I should have known' is more straightforward, and isn't a set phrase or colloquialism. It means the same as 'ought to have known'. It is often used as an expression of regret, for example. If you made a stupid mistake because you hadn't realised something, you might say. 'Oh, what an idiot I am. I should have known that ......'