One is that encoding arbitrary binary data using base64 will increase the size of the data by around one third, so you will transmit more data.
Of course, if you do the caching headers right, this applies only to the first connection.
The other overhead you have to pay for every time: The data has to be base64 decoded before it can be used. Depending on the amount and size of images and depending on the type of implementation in the browser, this can require a significant amount of resources.
edit: In addition I wonder whether browsers cache the base64 decoded output between page loads. If you are really unlucky, the decoding might be done on every page load. Also, I'm not sure how browsers would handle identical data-content in multiple CSS rules: Do they keep multiple copies of the same image in memory? Or do they detect identical data and keep only one image around?
I would do some tests before blindly applying this.