As Neal pointed out, bool_print was an order of magnitude too complex.
diff --git a/Objects/boolobject.c b/Objects/boolobject.c
index fc5c4ca..3953af6 100644
--- a/Objects/boolobject.c
+++ b/Objects/boolobject.c
@@ -7,18 +7,7 @@
 static int
 bool_print(PyBoolObject *self, FILE *fp, int flags)
 {
-	if (flags & Py_PRINT_RAW) {
-		if (self->ob_ival == 0)
-			fputs("False", fp);
-		else
-			fputs("True", fp);
-	}
-	else {
-		if (self->ob_ival == 0)
-			fputs("False", fp);
-		else
-			fputs("True", fp);
-	}
+	fputs(self->ob_ival == 0 ? "False" : "True", fp);
 	return 0;
 }