Why does my FXAS21002 gyrometer return a faulty WHO_AM_I?
Possibly wrong answer with some further reading required...

From the gyro's manual (p.15)


  A LOW-to-HIGH transition on the SDA line while SCL is high is defined as a stop
  condition (SP) signal. A write or burst write is always terminated by the master
  issuing the SP signal. A master should properly terminate a read by not
  acknowledging a byte at the appropriate time in the protocol. A master may also issue
  a repeated start signal (SR) during a transfer.


and (re: single byte read)


  The MCU transmits an SR, followed by
  the byte containing the slave address and the R/W bit set to “1” for a read


Putting these together with your scope plot, you are writing the WHOAMI address then issuing a SP (STOP) signal, instead of an SR (Start Repeated) signal.

This appears to terminate the transaction...

IMO the documentation is incomplete and should be supplemented by the I2C protocol specification (UM10204) , which, issued by a rival company, Freescale aren't in any hurry to help you find with anything so useful as a link. 

See page 9 of UM10204:


  The bus stays busy if a repeated START (Sr) is generated instead of a STOP condition. In
  this respect, the START (S) and repeated START (Sr) conditions are functionally identical.


(the difference between SR and STOP being, I believe, that you bring SDA high while SCL is still low so the next SDA falling edge starts the next transfer : confirmed by Figure 6 on p.10)  

So in your ReadRegister code  

Wire.beginTransmission(I2C_address);
Wire.write(address);
Wire.endTransmission();

delayMicroseconds(4);
Wire.requestFrom(I2C_address, 1);


I believe Wire.endTransmission() is incorrect and you need some other function (or possibly none at all) to continue the transmission and collect the data.

That is where the further reading comes in; I find it easier to program my Arduinos in Ada so I can't help you find the right function in the Arduino library.

But a quick search shows the EndTransmission documentation which says


  As of Arduino 1.0.1, endTransmission() accepts a boolean argument changing its behavior for compatibility with certain I2C devices.
  
  If true, endTransmission() sends a stop message after transmission,
  releasing the I2C bus.
  
  If false, endTransmission() sends a restart message after
  transmission. The bus will not be released, which prevents another
  master device from transmitting between messages. This allows one
  master device to send multiple transmissions while in control.
  
  The default value is true. Syntax
  
  Wire.endTransmission()
  Wire.endTransmission(stop) 
  
  Parameters
  
  stop : boolean. true will send a stop message, releasing the bus after
  transmission. false will send a restart, keeping the connection
  active.