What is the difference between bitcoinj and BitsOfProof?
There are lots of differences in features supported, but the crucial difference is the architecture: Embedded vs. Client-Server Bitcoin Protocol Node and Wallet.

BitcoinJ is a Java library to embed a Simplified or Full Verifying Bitcoin Node and a Wallet into your application.

The Bits of Proof Enterprise Bitcoin Server is a configurable Full Verifying Bitcoin Node written in Java. The server process is accessible through a message bus for client applications and extensions. Several layers and flavors of client libraries are available, such as: STOMP, Java, REST. The Wallet is implemented in the client library, therefore a server process can serve several unrelated applications and distinct Wallets. Several server instances might run in a load balanced configuration serving clients through a common bus. The company Bits of Proof offers commercial support and hosts server instances.