I don't think that a lot of people here used the VIC, and when they do it can be with very custom software or OSes, so I'm not sure you'll get a lot of answers.
I don't really interpret "can call ANSI C standard library functions" as "ANSI C standard library functions are thread safe". I just interpret it as "you can call the functions" ;) I haven't looked at the code but I'd be very surprised if Altera added some# ifdefs and all the synchronization functions to the functions that need it in newlib.
The problems with those kind of bugs is that sometimes it just works by chance, so it could be possible that in some cases you don't see it.
Still, it's rather strange that you have this behaviour, and that you fixed it with adding the semaphore to printf(), when you are only using printf() from one thread.