Having been in a similar position for years, I base my approach to how I'm billing the project: project based or time/materials based.
If I do project based billing, then I tend to be a little more formal. Meaning that my contract lays out the main project features as well as possible limitations etc. I go over it in detail prior to signing, then that becomes my blueprint.
I do allow for changes along the way, but I make those a little more formal as well with signed change request forms describing the change and the modified project costs.
On a 6 month to 1 year deal, I may show progress about once every 3 to 4 weeks; or at milestone developments at which point I do incremental billing. This is probably closer to being a waterfall approach than anything else.
If I am billing for time and materials then I tend to be a lot more flexible and have a lot more communication with the client. I may be showing something new every day, or at the very least, once a week. I basically try to show the result of each task I finish. The type of clients that want to bill hourly tend to like this format. This tends to be closer to an agile approach.
At the end of the day you just have to go with what works best in your situation.