Battery level indications are notoriously unreliable in most devices. That's why it's known as the indicator rather than the gauge, as the latter implies accuracy (same goes for car fuel tanks, which is why when there is less than approximately 30 miles of fuel left, my car then stops telling me the level and just says "Refuel!!"). It's very common to note unusual behaviour such as you describe, and other similar behaviour like the first 50% being used slower than the last 50%, etc.
In an attempt to improve the situation, Apple did something a little different with how the battery indicator value is commonly generated in iOS. But before I mention that, it's worth showing how a lot of other manufacturers do it (and indeed how Apple does it on OSX hardware still).
The normal method is to show 100% full when the battery stops charging. This is a physical measure, rather than a logical one, and relies on taking voltage/ampage readings and whether they have stopped increasing or reached expected levels, etc. On a Macbook, the behaviour shown by @Robuust' answer is because of this method of charging; because it's not good to keep topping up the battery to absolutely full when it has only lost a percent or so - it's better to use a bit more before starting to charge again. OSX won't bother charging a battery that was at 100% until it has dropped sufficiently to make charging it back up worth it without causing potential battery health issues. As such, if you unplug to walk to another room and drop from 100% to 98%, it will determine that it's not worth the potential shortening of a batteries long term life just to give you a 2% recharge. It will wait until a lower indication is reached, say 94%, and then when it drops below this threshold start to charge again.
This causes (or used to cause) endless user confusion; Why doesn't my battery get to 100%?!?! My battery is faulty...
So in iOS, they switched to a different method of reporting battery life. The genuine 100% charge state is still monitored in the same way, but the way it is reported to the user is different. The battery will show as full when in reality it's only, for example, say 95% full (I don't know the exacts, which probably changes model to model anyway). At this point you can safely unplug and use the device (there is no need to charge a modern battery all the way to prevent memory damage) although it might not be fully charged regardless of what it says. If you leave it plugged in however, it continues to charge. Physically as the battery reaches 100% charge, logically that is essentially going over the 100% level shown to the user, say to 105% (although this isn't shown, clearly). At the point that it reaches this genuine full mark it then runs on battery until the value is lowered back to 95% physical/100% logical. Then it charges up. It will use the top 5% or so of genuine physical battery charge to constantly run the battery through a small charge/discharge cycle, and display 100% at all times to the user, regardless of where it is in the cycle.
Actual physical battery capacity:
Logical user reported charge:
Logical user accessible charge:
Keeping a battery active in this way is better for its health than charging it to full and keeping in charged to full. Batteries are designed to be used, which is why laptop batteries on machines that commonly stay plugged in often fail with relatively little use - you should use the battery regularly to keep it healthy.
A net result of the above operation is that sometimes when your phone is showing 100% it will drop to 99 relatively quickly, because it was at that point in the cycle where it had been running on battery and was about to start charging again anyway. Other times when you unplug, it has just finished charging to its genuine full charge, and therefore you get all the extra time it takes to discharge down from its logical 105% down to 99%, so it will show at 100% for ages before starting to drop more consistently.
The same happens at the bottom of the battery too, when it hits 0%, it doesn't just run out of juice and die, it knows it has enough power reserved to perform a clean shutdown, and hold enough stuff like the date/time etc., or to be able to flash you an I need power! icon when you try to turn it back on.
Finally, as to why you can seemingly recover charge after a reboot, it seems reasonable to assume that this is just an artifact of the process used to provide the user with a logical battery indication, rather than the real thing. My physics isn't brilliant, but I believe that it's harder to record what the static voltage of a battery is when it's being used (as it's constantly draining), and during bootup it's probably actually using more power than when it's just sitting in your pocket and so on. Tie in this with some algorithm that is adjusting for the general age and health of the battery anyway (If a battery has lost 20% of its capacity over the course of a couple of years, it won't simply get to 80% full and go no further, its physically capacity is reduced and the logical capacity needs adjusting to give the same 0-100% range, even if that range is now smaller) and it's easy to see there's plenty of room for the values to hop about a bit.
The key takeaway is that the numbers reported to the user are nothing more than a software adjusted "approximation" of available charge, and can vary on current usage etc. It's not a defect :)