I've read that [上手]｛じょうず｝ is formal and [上手い]｛うまい｝ is casual... nothing else?
I think the biggest difference is that 上手 generally means "good at something", and うまい can mean that, but it can also mean "tasty" (as in food). The related word うまみ means "savory" (the '6th' flavor, found in things like eggs).
Grammatically, 上手 is a na-adjective, whereas うまい is an i-adjective, so they conjugate differently.
うまく (the adverb form of うまい) can be used with いく for the common expression うまくいく ("to go well"), whereas you generally wouldn't say 上手にいく.
While I guess you could say 上手 is more formal than うまい, お上手 would be an even more formal way to describe someone else being good at something.
As a side note, generally when talking about yourself being good at something, I would recommend 得意 instead of either of these two words.