When downloading the page with a tool like wget I also finde the amp's in the output, so it's not LWP adding "strange" characters. And I don't find them strange at all, because that's how you encode entities in HTML, including in URLs.
Maybe you want to use WWW::Mechanize, where the ->links method returns already decoded URLs?