Singleton class and mysqli transaction
As @Marc B mentioned, transactions are connection-based, so generally you are able to start and commit a transaction in two different objects.
However, you should make sure you're not using persistent connections (read more about connections handling by PHP and mysqli http://php.net/manual/en/mysqli.quickstart.connections.php. Persistent connections are pooled between scripts and potentially expose your app to risk of transactions interference.
Also, bear in mind that some statements cause an implicit commit (as explained http://php.net/manual/en/mysqli.quickstart.transactions.php). You should also verify, that your connection to DB doesn't time out during script execution (in some cases it can happen). I'd start with checking MySQL's wait_timeout http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_wait_timeout setting.
IMO you should also think hard about the design of your application. I strongly believe, that DB objects should be only available in Model objects and called only from inside of them, not explicitly anywhere in code.
And if you decide to think about transactions - remember to put aproppriate methods in your DataBase class (like adding autocommit(TRUE) and rollback() on object destruction, if there was a transaction started). It's better to be safe than sorry.
I strongly encourage you to choose (or change your db engine) to InnoDB (great support for table locking and transactions) - read more about it in The InnoDB Transaction Model and Locking. Also a greaty deal of useful info about transactions is in documentation here: Mysql transactions and locking.