Your calculation is correct. linear1 rounds up to the next E12 value, which happens to be 100\$\Omega\$. The nearest E12 value would have been 82\$\Omega\$, and that would still be safe, because, even if the current will be higher, the difference will be small, within the 10% tolerance of the E12 series.
edit
Purists may say I'm cutting corners here. Russell has a long answer about iterating the solution, and others whine (hey, no offense!) about rounding up being more safe. My answer is meant to be pragmatic; no professional design engineer can afford to spend 15 minutes to calculate the resistor for a classical color LED. If you stay well below the maximum allowed current you'll have enough headroom to allow some rounding, and the rounded value won't be noticeable in brightness. For most LEDs perceived brightness doesn't increase much above a value of typically 20mA, anyway.
What I don't understand is the math for how to figure out the exact voltage drop of the transistor between the collector and emitter.
You don't need an exact voltage. \$0.2V\$ is a reasonable estimate for most BJTs in saturation. The datasheet will give you more accurate values, under a range of operating conditions. \$0.2V\$ also isn't very significant to most circuits, so you can just ignore it. By ignoring it, you slightly reduce the current in the LED, which is erring on the side of caution, so isn't necessarily a bad thing.
And I'm also trying to figure out the math used to calculate the required milliamps that have to flow through the base of the transistor in order to fully turn it on (but not waste extra electricity).
There's a rule of thumb for a BJT used as a common-emitter switch, like this:
simulate this circuit – Schematic created using CircuitLab
when you want to drive the transistor into saturation (as you do here), make the base current 1/15th of the collector current. Again, the datasheet will give you more detail, but many of the parameters (like \$\beta\$ or \$h_{fe}\$) can vary over a wide range, as a function of temperature, operating current, and individual device manufacturing variation. The solution is to make sure you have plenty of base current so you are sure to saturate the transistor in all cases.
So:
$$ I_b = \frac{I_c}{15} = \frac{100mA}{15} = 6.7mA $$
The base resistor will have the \$5V\$ from the Arduino across it, less the \$0.65V\$ drop of the base-emitter diode across it, and the current is then given by Ohm's law:
$$ R_b = \frac{V_{R_b}}{I_b} = \frac{5V-0.65V}{6.7mA} = 652\Omega $$
Standard value of \$680\Omega\$ is close enough. The power in R1 is:
$$ P_{R1} = \frac{V^2}{R} = \frac{(5V-0.65V)^2}{680\Omega} = 0.028W $$
...so even a 1/8W resistor is fine here.
You mention that you don't want to waste electricity. There's not exactly much being wasted here; probably the current limiting resistor in series with your LED is wasting more electrical energy than this transistor arrangement. But, there are a few ways around it. One is to use a MOSFET instead of a BJT, which has the advantage of nearly 0 gate (equivalent to the base) current. 2N7000 is common and cheap and would do nicely here.
Or, you can arrange the transistor as an emitter-follower, so the base current goes towards powering the LED, and is thus not "wasted":
simulate this circuit
For more detail, see Why would one drive LEDs with a common emitter?
Best Answer
If you select R1 using ohm's law and get the correct voltage drop across the BJT (0.7+ volts, depending on transistor), then you will reach your current limit with a value of 0 for R2 long before the current gain matters. This is called using the BJT in 'saturation mode' and is most appropriate for applications where the BJT is a digital switch.
https://en.wikipedia.org/wiki/Bipolar_junction_transistor
If you use a n-chan MOSFET instead, you don't have to worry about current gain.
Also, I would use a pull down resistor between the right side of R2 and ground so that the input is not floating when you want to disable it.
The major concern, with your current circuit, is selecting too small of R1, so that the circuit is dependent on the current gain (and a precise R2 value) which is known as 'forward-active mode', where your microcontroller needs to source excessive current and could be damaged.
Unless this is for a homework assignment and it's critical, I would use a MOSFET. If it's for homework, you'll probably need to use your textbook's method for providing calculations based on your teacher's expectations.
Edit:
The BC547 has a current gain of 200 and an approximate Vce at saturation of 90~250mV at 10mA. So for 20mA you would have 180~500mV.
So your equation for Ic would be: 0 = 3.3V - 1.3V - Vce(sat) - Ic*R1 inputting best and worst case values for Vce you get... (2v - 0.18v)/(20mA) = R1(largest) = 91 (2v - 0.5v)/(20mA) = R1(smallest) = 75
For the gain (of 200) your equation for Ib would be: Ic = Ib*G Ib = 20mA/200
For the R2 value based on Vbe (PN junctions are 0.7v), you would have: V(input) - Ib*R2 - Vbe = 0 R2 = [V(input) - Vbe]/Ib inputting assumptions of 5v or 3.3v control input signals gives you... 5v – 0.7v = Ib * R2 => 43k 3.3v – 0.7v = Ib * R2 => 26k
All that said, if you pick a value of 100 for R1 and a 10k for R2, with a pulldown resistor of 100k you should be good to go. A large R1 makes R2 non-important and you want your pulldown large enough that it doesn't effect your Ib current (10x factor is safe).