The difference is stuff installed in /opt is encapsulated inside its own folder, whereas everything in /usr/local is shared (one bin dir, one lib dir, etc).
So if I want to uninstall Ruby from /opt I do something like this:
rm -rf /opt/ruby-1.8.7
To uninstall Ruby from /usr/local is a lot more work.