TL;DR - it is your direct fault that the bounty was not awarded to Tim's answer. You should have either manually awarded it before the bounty was over (by clicking this "blue +100 flag" as you call it), or leave it accepted, thus causing it to be auto awarded when the bounty was over. By accepting your own answer, you nullified the auto award.
Now to explain why the bounty was not awarded automatically.
As we can see in the question revisions, the bounty was started at December 19, 2015 4:04 UTC and ended little more than 8 days later, on December 27, 2015 05:09 UTC:
Now let's take a look in the answers that existed when the bounty was over:
Your own answer that was posted a day before: is not eligible for bounty, being a self answer. (This part you seem to already know and understand, leaving here for sake of completeness)
First answer by Timo - was posted at December 17, 2015 which is before the bounty was started, hence not eligible for the auto bounty award. This is clearly stated in the rules you quoted yourself:
the highest voted answer created after the bounty started...
(You could still give it the bounty manually by clicking the +100 blue icon.)
Second answer by Timo which was posted at December 23 2015 - this one was indeed posted while the bounty was active, however as can be seen in Timo's reputation tab, at December 27, 2015 05:09 it had only one upvote:
The second upvote was given at 17:11 which is 12 hours after the bounty already expired. Again, the rules from help center you quoted yourself contains:
with a minimum score of 2
That's it. Hope now it's clear.
Worth to mention, this can't be "fixed". Even SE staff can't undo the bounty now that it is expired and give you the reputation back.
If you really care, just start a new bounty, this time giving it manually - 100 points are quite a lot, but after all it's just virtual internet points.