Ich würde sagen, du machst dir ein wenig zu viel Gedanken über die Geschwindigkeit...zumal dein Test sehr synthetisch ist. OpenGL ist vielleicht etwas langsamer als DirectX bzw. die Treiber sind nicht ganz so optimiert. Aber es reicht eigentlich immer aus. 300fps für 130 Objekte mit insgesamt ~130.000 Polygonen ist ja so schlecht nun nicht. Das sind immerhin fast 40 Millionen Polygone/Sekunde.
Wie auch immer, zu deinen Fragen:
Ohne compile() ist es wesentlich langsamer und du benötigst eine wesentlich größere Visibilitylist. Das kannst du in Config.maxPolysVisible vorgeben. Du solltest eigentlich im Log auch eine entsprechende Warnung mit diesem Hinweis finden.
Der Unterschied zwischen build() und nicht build() (wobei du immer build() aufrufen solltest, ansonsten hast du wenig Spaß, wenn du z.B. Lichtquellen ergänzt) kommt daher, dass build() auch das Rotationspivot berechnet. Deine Rotationen laufen also mit und ohne build() um verschiedene Pivots und daher sieht das Ergebnis anders aus.
Dein Test ist wie gesagt sehr synthetisch. Du hast 130 gleichförmige Objekte ohne Beleuchtung und die sind auch noch alle sichtbar. Die ganzen Tricks, die die Engine aufbieten könnte, um eine Szene bestmöglich zu berechnen, laufen hier ins Leere.
Was deine CPU angeht: Die Beta hat (noch undokumentiert) eine neue Klasse dabei, mit der sich die Berechnungen (nicht das Rendern) bei vielen Objekten auf mehrere Threads verteilen lässt. In der nächsten offiziellen Version ist das dann auch dokumentiert.