In hatchery stock (most of them out there) the main difference is color. The reason New Hampshires aren't so popular is the same reason Catalanas aren't - Popularity by word of mouth. In production strains they really don't differ much but for better temperament but sometimes less production, however, most people when they think of chickens they think of two things - Rhode Island Reds and Leghorns. And, most people don't want Leghorns.
In true to type stock that meets the original breed standard and purpose, -
Rhode Island Reds are more brick like in shape, have a very deep nearly blackening red coloration that is also very lostrous even in females, and the tail angle is very low, the tail itself being kinda small. The bird truly does look like a brick with no "sore thumb" attributes like a squirrel (90 degree) or pinched tail, folded comb, skinny type, etc. They were originally meant to be a dual purpose bird, weighing more than what most you see now a days.
New Hampshires (no red in the name) were an improvement from them but are of different color. One of their better qualities was feathering in faster, another was well known meat qualities. True New Hampshires now in the US are very rare, moreso than Rhode Island Reds. In type, they're also pretty bulky but not so much a brick shape; one notable characteristic is their medium sized, well expanded, slightly low carriage of tail (but higher than RIR's)
I'd normally say look at some good SOP illustrations to see the difference, but personally I think the available New Hampshire example out there is just not a good one. My opinion. But, a good difference that is easy to see besides color is that New Hampshires have a higher set tail with good expansion, like a fan; Rhode Island Reds have a small tail, very low set, not so obviously visible to detract from the birds' general geometrical shape.