casi lo lograste.
Para obtener los últimos 30 valores, simplemente use menos en su lugar. En tu caso, puedes hacer algo como:
Device.findOne({ device_id: deviceId }, { movements: { $slice: -30 } }, (err, device) => {
....
})
Espero que haya ayudado.