Transaction fees and transactions with bitcoin-cli. Wallet address balance negative
How to do #1? i.e. How to calculate the size of the transaction (in bytes) + transaction fee in advance?


You can use the recently-introduced fundrawtransaction RPC:


First create a transaction with just the outputs you want but no inputs, using createrawtransaction.
Then call fundrawtransaction on it (which will compute fee, and add inputs and change).
Observe the fee, and do balance checks for your user.
If acceptable, sign the transaction (using signrawtransaction) and broadcast it (using sendrawtransaction).



  Using bitcoin-cli settxfee  seems to return true but the actual transaction fee that is applied to me was much higher. Why was this the case?


settxfee sets the fee per 1000 bytes, not the total. If your transaction ends up being larger than 1000 bytes, the fee will be higher.


  I need to know more details about how the move command works. Is move an actual transaction that will incur transaction fees?


Read up on how the account system works. There is no transaction involved, as account balances are simply local bean counters. All coins in your wallet are shared across all accounts. Account balances just keep track how much of them belong to whom (but not which specific coins belong to whom). Move simply updates the balances without any transaction on the network.                          


  Is option 2 a good option to hide/solve my problem?
  What are other options / correct implementation for implementing a withdraw button?                


No, because the account system is deprecated and will be removed in a future version. Reasons for this is that it is very hard to understand (as this question shows!), and makes backups nearly impossible (as the account information for sendfrom cannot be recovered from the blockchain, restoring a wallet backup will mess up your accounting).

Instead, use the fundrawtransaction mechanism described above, and implement user balances in a higher-level layer (which does for example stores the account information in a database with proper backups).


  Can sendfrom take out money from other accounts other than the "" account?


By definition, no. It creates a transaction using all coins in the entire wallet to fund it, and then subtracts the amount sent plus fee from the specified account.