Jeremy,
I'm going to read some tea leaves here on your PutNumber crash with a boolean and I may or may not hit the mark... we saw an issue (and have reported it) which would crash smartdashboard/network tables and the robot consistently...
1) int i = 5; SmartDashboard:

utNumber("MyLocation", i); // This works and must be done once to induce the crash - put a non-boolean into a named location...
2) bool i = false; SmartDashboard:

utNumber("MyLocation", i); // This crashes consistently - the change from an int to a bool leaves someone with the "wrong expectation" of what type will actually be used.
// And here's the fix... don't re-use "MyLocation" with different types - in fact if you want to be sure, make sure you name your locations based on what type they will wind up receiving - "bool_MyLocation" and "int_MyLocation"
3) bool i = false; SmartDashboard:

utNumber("differentLocation", i); // This works just fine.
bob