How do you implement an Energia interrupt handler?
One more reason for not using that Arduino libraries, you first need to find out what happens in the background. That, coupled with only the limited debug capability.

Apparently, the Arduino Library performs the actual communication in the endTransmission call. It does this by using the TWI hardware (even using interrupts) but it makes use of an infinite loop as well to wait for that interrupt (strange concept, but ok...).

So it appears that either your I2C communication doesn't work (pull-ups on I2C lines come to my mind) or you happen to disable your interrupts in the meanwhile - thus when the interrupt happens which signals end of your I2C transmission, you have disabled it before. 

So, how could we get around that:


Try, if your I2C communication works at all with a default, new program (no sleep modes, just the default arduino setup).
Do you have any way of seeing if you're stuck in an infinite loop. Maybe you can toggle a LED quickly in your main loop and check that with a scope. If you don't see the LED toggling anymore, you're probably stuck inside the I2C loop.
I don't know how well your microprocessor handles stacked interrupts (when one interrupts happens during another) - I would guess it doesn't at all. Anyway, interrupt handlers MUST at all times be kept very short, doing time-consuming tasks inside an interrupt handler is almost always a No-Go. So you will build some kind of simple state machine to handle your sitation "correctly". This might also be a possible reason why your program goes into Nirvana. I'll outline how you do this correctly. 
Your interrupt to wake up from sleep occurs, this is fine, now set a "global" flag to indicate you need to do something in your main loop, let's call it "do_communication = true". Your interrupt doesn't do anything else, than to set this flag. Do NOT send it into sleep mode right now.


In every iteration of your main loop, check if this specific flag is set. If it is, perform your I2C communication here - you're now outside of any interrupt. After you have performed your communication, set that flag to do_communication = false and send your microcontroller to sleep.
Wait for the next wakeup interrupt to happen, then perform the above again



Usually, all your interrupt does is to set a flag, handle the time-consuming tasks in the main when the main "sees" that the flag is set. This will make sure you don't get problems with stacked interrupts.