1. It's smoother. Instead of having an arbitrary threshold above which posts cease to count, the output varies continuously in the input of interests.
2. It requires to actually be active throughout the registration method. With your method, someone who has been registered for 104 weeks and posted once per 2 weeks (that is, not very active at all), can jack up his activity from 52 to 728 by spamming 700 posts at once. Whereas with my method there is an upper bound on how much you can boost your score by concentrated posting.
With your method, someone who posts 5 posts per period for 40 weeks has a worse score than someone who posts 100 posts per period for 5 weeks. This is wrong. Slower, more consistent posting is better. A min() somewhere is needed, I think.
As you mentioned, the current method doesn't work perfectly in some strange cases because it only looks at two-week periods in aggregate, but this makes the implementation much easier and more efficient. I can do it with one SQL statement:
select smf_messages.ID_MEMBER as id, least(count(distinct posterTime div 1210000) * 14,
posts) as activity from smf_messages join smf_members on (smf_messages.ID_MEMBER=smf_members.ID_MEMBER)
group by id;
Your method is in principle not significantly less efficient than this, but it will at least make the SQL significantly more complicated, and I might have to create a slower and much larger PHP function. (I know that your method is directly possible in PostgreSQL, but I'm not sure about MySQL.)