Or does coinbase not actually send bitcoin but simply adjust balances internally within their website?
^ This.
They are not sending Bitcoin from a address to another. They are simply just changing your balance info on their database to a lower or higher amount when you transfer money. They actually only send Bitcoin through the "real" blockchain when you want to withdraw to another wallet outside their system.
Does that mean they have full control over my money with them and if they want they can change my balance? This is alarming as there should be a mechanism so that they cannot change my balance. You may say they will only do it when instructed by me (by transferring btc to another wallet) but it leaves the accounts prone to human error.
Yes, that's true. that's why you should never keep your bitcoins on exchanges/web wallets. only send your coins to exchanges whenever you want to sell for USD.
So coinbase has recently announced that they can no longer do free transactions as they are experiencing rapid growth and has introduced a fee for sending bitcoin since the miner fees have gotten higher. Some the fee can be as high as $3.00 worth of btc (as of this day June 27th 2017)
But how can they still do free transactions between bitcoin addresses on coinbase? Is it cheaper to send btc within the same wallet or something? Or does coinbase not actually send bitcoin but simply adjust balances internally within their website?
AFAIK, you should enter email address of receiver not bitcoin address to be it considered as internal/free transaction. and you're right they just adjust balances.