Correctly update model, accounting for possibly dropped frames

Thanks to @johnpmayer for discovering this issue!

Since draw is async, it was possible to update the model without
updating the underlying DOM stuff. This could cause issues on its own,
but if you need to pass info from model to model, that is also lost
when this happens.