Exponential growth equation and bacteria
Considering your assumption:


  I'm just looking at the exponential part, where the simple exponential
  equation works. If we assume there's sufficient nutrients for bacteria
  to grow unchecked for a number of hours (more-or-less true in a real
  culture)


In your original model you are using discrete states and fixed time steps. So, if 30 min is one time step then after n-steps you have $2^n$ or $4^{(n/2)}$ cells. You are basically counting double steps, which is fine. For a continuous approximation you should estimate the rate like this. 

You have the first-order growth equation:

$$\frac{dN}{dt}=rN$$

When you integrate this equation (definite integral) you'll get:

$$ln\left(\frac{N_f}{N_i}\right)=r\tau$$

Where $N_f$ is final number of cells, $N_i$ is initial number of cells and $\tau$ is the time interval.


When the cell number doubles then $\dfrac{N_f}{N_i}=2$ and $\tau=30\ \text{min}$ (doubling time). 

 Then your rate constant would be: $\dfrac{ln(2)}{30}\approx0.023\text{ min}^{-1}$

After 16 hours (16×30min) your number of cells would be: $e^{0.023\times16\times60}\approx 4.27\times10^9$ (approx 4 billion).

So what is basically wrong? You haven't rescaled your rate. Since the exponent is $e$ and you know that $a^x=e^{x.ln(a)}$, all you need to do is scale the rate constant with $ln(a)$ (a=2). Moroever, in a continuous model, you don't have fixed time steps. So you scale the constant with the doubling time as well.