Uno R3 + 20x4 I2C LCD - screen freezes / garbage

OK, I've trimmed this down as much as I can. The "hello world" printed to the LCD in setup() works fine, and then the mills() counter starts. On the serial line it continues fine, but on the LCD it gets as far as ~4k to ~6k (i.e. 4 to 6 seconds) and then stops.

I'm using the IDE version 1.0.2 on Mac OSX Mountain Lion on a 2012 macbook Pro 15". I've copied the new LiquidCrystal library V1.2.1 (from here https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads) into my libraries folder.

I've tried this with 4k7 pull-up resistors between SDA and +5V and between SDL and +5V.

//DFRobot.com
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>  // F Malpartida's NewLiquidCrystal library

#define I2C_ADDR    0x20  // Define I2C Address where the PCF8574A is

#define BACKLIGHT_PIN     7
#define En_pin  4
#define Rw_pin  5
#define Rs_pin  6
#define D4_pin  0
#define D5_pin  1
#define D6_pin  2
#define D7_pin  3

#define  LED_OFF  0
#define  LED_ON  1
  
LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
  Serial.begin(9600);
  
  lcd.begin (20,4);  // initialize the lcd 
  // Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
  lcd.setBacklight(LED_ON);
  
  lcd.setCursor(0, 0);
  lcd.print("Hello world");
  delay(1000);
  lcd.setCursor(0, 0);
  lcd.print("           ");  
}

void loop()
{
delay(1000);

  Serial.println(millis());
  
  lcd.setCursor ( 0, 0 );
  lcd.print(millis());
}