Based on the @IsTest documentation they are equivalent, and no benefit or prefered syntax is mentioned.
I suspect the
testMethod keyword was first, and that they needed an alternative that could take the
SeeAllData parameter when hiding your actual data from tests by default.
For Apex code saved using Salesforce.com API version 24.0 and later, use the isTest(SeeAllData=true) annotation to grant test classes and individual test methods access to all data in the organization, including pre-existing data that the test didn’t create.
So I expect the isTest annotation didn't exist before API 24.0.