I²C only works when I short-circuit my Arduino
Any ideas what I'm doing wrong?


Apart from deliberately shorting +5V to ground? Sheesh!



Get, or make, a level-shifter. You can't pump 5V from the Nano to the Pi and expect things to work. Example schematic:



In this example the low voltage (3.3V) side is marked LV, and the high voltage (5V) side is marked HV.




  You can use a level shifter with I²C but you don't need one. The Pi has pullup to 3.3V. Provided there are no other pullup it works. I routinely do this.


The important phrase there is "Provided there are no other pullup".

Wire.begin() enables the pull-ups. So make sure that on the Nano side you disable them again:

 

  Wire.begin (4);
  // disable internal pullups for twi.
  digitalWrite(SDA, LOW);
  digitalWrite(SCL, LOW);